正则表达式 速成

正则表达式的作用

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

如何快速上手?

1、打开 学习、构建和测试正则表达式网址:RegExr: Learn, Build, & Test RegEx

2.我们点开Cheatsheet(备忘单) 

可以看到一共分成了五个部分

字符类:

表达式含义
.任何字符(除换行符外)
\w \d \s单词、数字、空格
\W \D \S非(词、数字、空格)
[abc]a、b或c中的任何一个
[^abc]非 a、b或c
[a-g]a到g之间的字符

锚点定位:

表达式含义
^abc$字符串的开头/结尾
\b \B单词边界字符、单词非边界字符

转义字符:

表达式含义
\.  \*  \\如果需要匹配它们本身而不是它们的特殊含义,则需要在它们前面加上反斜杠 '\' 进行转义
\t  \n  \rtab ,换行,回车

组和环:

表达式含义
(abc)捕获组
\1对组#1的反向引用
(?:abc)非捕获组
(?=abc)正向前看
(?!abc)负向前看

词量与交替:

表达式含义
a*a+a?0 个或多个、1 个或多个、0 或 1 个
a{5}a{2,}恰好五个、两个或更多
a{1,3} 一到三之间 
a+?a{2,}?尽可能少的匹配
ab|cd匹配 ab 或 cd 

表达式介绍完了,我们举个例子来使用一下这些内容:

Unity的Animator有这么一个接口
 

public void Play(string stateName, [DefaultValue("-1")] int layer, [DefaultValue("float.NegativeInfinity")] float normalizedTime)

我们希望在代码中调用的地方全部改为自身定义的 PlayAnimation

public class AnimCacheManager
{public static void PlayAnimation(Animator animator, string animationName, int layer = -1, float normalizedTime = 0,float speed = 1){if (animator == null){return;}animator.speed = speed/MatchSpeedMgr.Instance.SpeedValue;animator.Play(animationName, layer, normalizedTime);}
}
首先我们需要找到.Play前的字符串,因为变量名可以有数字所以
  • 用 \S可以表示配空字符,
  • 用组()和 * 表示一个或者多个字符组组成的变量名

(\S*)\.Play

接下来就是匹配括号里的内容了

首先补齐 ();应为(是组符号,所以匹配(自生就需要 \转义 得出 (\S*)\.Play\(\);

Play()括号中有 :,数字,字符,所以我们可以匹配 任何字符(除换行符外)可以使用 .* ,然后用组 ()组合 得出(.*)

加入到上面的正则表达式中就有:

(\S*)\.Play\((.*)\);

筛选出来符合的字符串之后就是替换成我们自己的接口字符串:

AnimCacheManager.PlayAnimation($1,$2);

$1 表示匹配的第一个组 : (\S*)
$2 表示匹配的第二个组 :(.*)

我们拿 JetBrains Rider 来做测试:

可以看出,字符串替换成功。

总结:

1.我这边举的例子算比较复杂的,但是拆解之后可以看出并不难

2.当你不理解含义的时候直接点击参考理解即可:

3.合理的使用正则表达式到工作中可以大大的提高工作效率

4.正则表达式回了就不难

5.不用死背表达式,忘了就来网址上找就行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中<string.h>的strstr与strtok函数

c语言中string.h的strstr与strtok函数 代码运行结果 代码 #include <stdio.h> #include <string.h>///1.在字符串str1里面,查找第一次出现str2的位置 //char * strstr(const char * str1,const char * str2)///2.sep为分割符,根据分割符来对str进行分割 //char * …

解决Django中的UnicodeDecodeError问题

在使用Django进行Web开发时&#xff0c;有时会遇到一些由于编码不一致引起的问题&#xff0c;特别是在处理文件读写操作时。一个常见的错误是UnicodeDecodeError&#xff0c;其表现为gbk codec cant decode byte 0xa6 in position 9737: illegal multibyte sequence。这个问题通…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

【SpringBoot:详解Bean装配】

&#x1f3e1;Java码农探花&#xff1a; &#x1f525; 推荐专栏&#xff1a;<springboot学习> &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、IoC容器的简介BeanFactory接口源码二、Bean装配扫描装配探索启动类条件装配自定义Bean总…

Storm详细配置

一、认识Storm Apache Storm是个实时数据处理的“大能”&#xff0c;它可以实时接收、处理并转发大量数据流&#xff0c;就像一个高速运转的物流中心&#xff0c;确保数据及时、准确地到达目的地。我们要做的&#xff0c;就是把这个物流中心搭建起来&#xff0c;并且根据我们的…

版本管理|Git -目前最好的版本管理工具

文章目录 什么是版本为什么需要版本管理Git -目前最好的版本管理工具Git的关键特点和概念初始化Git保存代码改变git addgit commit -m ""git statusgit log branch分支管理git branch & git chekoutHEAD的本质git merge 合并fast forward merge 本地与远程如何解…

【一刷《剑指Offer》】面试题 3:二维数组中的查找

力扣对应题目链接&#xff1a;240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 核心考点&#xff1a;数组相关&#xff0c;特性观察&#xff0c;时间复杂度把握。 一、《剑指Offer》对应内容 二、分析题目 正常查找的过程本质就是排除的过程&#xff0c;谁排除…

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址&#xff1a; 论文地址点击即可跳转 官方代码地址&#xff1a; GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候&#xff0c;都会丢失一定的信息。针对这一问题&#xff1a; 论文中提出的可编程梯度信息…

PYTHON 爬取彼岸图片升级版

import requests from lxml import etree import time import os from concurrent.futures import ThreadPoolExecutordate_dict {动漫: dongman,游戏: youxi,美女: meinv,风景: fengjing,影视: yingshi,汽车: qiche,人物: renwu,动物: dongwu,宗教: zongjiao,北京: beijing }…

2024.4.14力扣每日一题——设计哈希集合

2024.4.14 题目来源我的题解方法一 链表数组 题目来源 力扣每日一题&#xff1b;题序&#xff1a;705 我的题解 方法一 链表数组 由于给定限制次数为10000&#xff0c;所以构造一个长度为10001的链表数组。对于add操作先看数组对应的位置是否为null或者为空&#xff0c;若是…

免费的 ChatGPT 网站(六个)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、insCode二、讯飞星火三、豆包四、文心一言五、通义千问六、360智脑 现在智能…

【窃取网络游戏中虚拟物品的行为定性】

虚拟物品随着网络游戏产业的不断发展越来越走入人们的生活。与此同时&#xff0c;窃取网络游戏中虚拟装备、货币等侵害网络游戏虚拟物品的行为屡见不鲜&#xff0c;对网络游戏产业环境造成破坏的同时对游戏参与者的权益也造成了一定的侵害。对于窃取网络游戏虚拟物品的行为&…

2024-04-13 问AI: 什么是h5py文件?

文心一言 h5py文件是HDF5文件的一种Python接口表示形式。HDF5&#xff08;Hierarchical Data Format 5&#xff09;是一种用于存储和组织大量科学数据的文件格式。h5py是Python中的一个库&#xff0c;提供了对HDF5文件的高级封装&#xff0c;使得在Python中处理HDF5文件变得更…

Docker - Nginx

博文目录 文章目录 说明命令 说明 Docker Hub Nginx 数据卷数据卷印射在容器内的路径nginx.conf/etc/nginxnginx.html/usr/share/nginx/htmlnginx.log/var/log/nginx 容器内的路径说明/etc/nginx/nginx.conf配置文件/etc/nginx/conf.d配置目录/usr/share/nginx/html静态目录/…

【漏洞复现】WordPress LayerSlider插件SQL注入漏洞复现

声明&#xff1a;亲爱的读者&#xff0c;我们诚挚地提醒您&#xff0c;Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失&#xff0c;均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

C数据结构:双向链表(带头循环)

前言 链表分多种&#xff0c;分别为 不带头不循环单向链表、不带头循环单向链表、带头循环单向链表、带头不循环单向链表 不带头不循环双向链表、不带头循环双向链表、带头循环双向链表、带头不循环双向链表 一共八种 在前一篇博客中完成的单链表即为不带头不循环单向链表…

杰发科技AC7840——CAN通信简介(5)_可变波特率设置

0. 简介 设置可变波特率时候&#xff0c;遇到2个坑&#xff0c;在此记录下来 使用该函数即可 can_time_segment_t bitrate2 s_canBitrate[CAN_BITRATE_250K]; CAN_DRV_SetBitrate(instance, &bitrate2); 1. 波特率指针注意不要空 查看设置波特率的接口&#xff0c;发现…

儿童学编程的好处

儿童学习编程是当今社会中越来越受到关注的话题。随着科技的发展&#xff0c;编程已经成为一种基本的技能&#xff0c;而儿童正是未来的希望。因此&#xff0c;让儿童学习编程具有诸多好处。 首先&#xff0c;学习编程可以培养儿童的逻辑思维能力。编程是一门需要严密思维和逻…

nodejs安装常用命令

安装 Node.js 后&#xff0c;你可以在命令行中使用以下常用命令&#xff1a; node&#xff1a;启动 Node.js 的交互式解释器&#xff0c;可以直接在命令行中执行 JavaScript 代码。 npm install <package-name>&#xff1a;安装一个 Node.js 模块&#xff0c;<packag…

吉他弹唱谱怎么制作 Guitar Pro 怎么写弹简谱 Guitar Pro8.02简谱

学习如何制作吉他弹唱谱是提升音乐创作和表现能力的重要一环。借助专业的软件工具如Guitar Pro&#xff0c;可以轻松地将音乐创意转化为可视化的乐谱&#xff0c;使演奏和分享变得更加便捷和高效。下面我们来看看吉他弹唱谱怎么制作&#xff0c;Guitar Pro 怎么写弹简谱的相关内…