正则表达式 速成

发布于:2024-04-14 ⋅ 阅读:(203) ⋅ 点赞:(0)

正则表达式的作用

正则表达式,又称规则表达式,(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  \r tab ,换行,回车

组和环:

表达式 含义
(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.不用死背表达式,忘了就来网址上找就行