正则表达式 速成

本文介绍了正则表达式的概念、各类字符的含义、锚点定位和转义方法,通过UnityAnimator接口示例展示如何在代码中使用正则表达式进行字符串匹配和替换,强调其在提高工作效率中的作用。

正则表达式的作用

正则表达式,又称规则表达式,(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.不用死背表达式,忘了就来网址上找就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值