当前位置: 首页 > news >正文

正则表达式 速成

正则表达式的作用

正则表达式,又称规则表达式,(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.lryc.cn/news/338407.html

相关文章:

  • 21、Lua 面向对象
  • openssl3.2 - exp - class warp for sha3-512
  • cog predict docker unknown flag: --file
  • SpringMVC接收参数方式讲解
  • JavaScript 中arguments 对象详细解析与案例
  • 消除 BEV 空间中的跨模态冲突,实现 LiDAR 相机 3D 目标检测
  • 【免安装的MATLAB--MATLAB online】
  • Flyway 数据库版本管理
  • lua学习笔记19(面相对象学习的一点总结)
  • 视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图
  • 【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和
  • CSS核心样式-02-盒模型属性及扩展应用
  • 在 Google Cloud 上轻松部署开放大语言模型
  • 005Node.js模块URL的使用
  • 美团笔试复盘
  • IntelliJ IDEA - Since Maven 3.8.1 http repositories are blocked
  • Django的APP应用更名(重命名)流程
  • ChatGLM3-6B大语言模型离线执行
  • 了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)
  • 2024.4.14力扣每日一题——设计哈希集合
  • SQL explain 显示子查询A类型为ALL怎么优化
  • 网络协议学习——IP协议
  • MATLAB初学者入门(1)—— 基础知识和功能介绍
  • React Css 四种引入方式
  • 题目:输入3个数a,b,c,按大小顺序输出。
  • AI预测体彩排3第3弹【2024年4月14日预测--第1套算法开始计算第3次测试】
  • Android 在xml 布局中如何嵌套 Jetpack Compose
  • Spring Boot统一功能处理(一)
  • 我与C++的爱恋:类与对象(二)
  • BERT入门:理解自然语言处理中的基本概念