使用正则表达式捕获分组并使用分组

捕获符号 以及 捕获后的使用

最常使用的场景是: 需要使用正则表达式进行替换, 但是同时需要使用到正则表达式所匹配到的内容, 这时候就需要用到分组了, 举个非常简单的栗子🌰, 将下面的代码段一替换为代码段二

代码段一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var tempTool001 = new RefCleanerController();
var tempTool002 = new TextureAnalysis();
var tempTool003 = new MeshAnalysis();
var tempTool004 = new ProfilerTool();
var tempTool005 = new AnimeClipCompress();
var tempTool006 = new BrokenAssetChecker();
var tempTool007 = new RefCleanerMat();
var tempTool008 = new PreCombineMesh();
var tempTool009 = new MeshUVViewer();
var tempTool010 = new PreStaticBatches();
var tempTool011 = new GuidFinder();
var tempTool012 = new AssetOperateTool();
var tempTool013 = new AssetRenameTool();
var tempTool014 = new SoCreator();
var tempTool015 = new LODBatchTool();
var tempTool016 = new MissingChecker();
var tempTool017 = new RemoveRepeatCharacter();
var tempTool018 = new About();

代码段二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
AddTool<RefCleanerController>();
AddTool<TextureAnalysis>();
AddTool<MeshAnalysis>();
AddTool<ProfilerTool>();
AddTool<AnimeClipCompress>();
AddTool<BrokenAssetChecker>();
AddTool<RefCleanerMat>();
AddTool<PreCombineMesh>();
AddTool<MeshUVViewer>();
AddTool<PreStaticBatches>();
AddTool<GuidFinder>();
AddTool<AssetOperateTool>();
AddTool<AssetRenameTool>();
AddTool<SoCreator>();
AddTool<LODBatchTool>();
AddTool<MissingChecker>();
AddTool<RemoveRepeatCharacter>();
AddTool<About>();

在不使用多行编辑的情况下, 想一步将代码段一替换为代码段二还是很麻烦的, 基本都是花费好几步才能完成, 但是使用捕获就不一样了

搜索栏填写 : .*new (\w+).*

替换栏填写 : AddTool<$1>();

其中使用 $数字 来引用正则中匹配到的内容, 在第几个 () 中就是第几组, 序号从 1 开始

使用捕获来实现字符大小写转换

\l 首字母变小写, \u 首字母变大写

\L 字符串变小写, \U 字符串变大写

还是以上面的字符串举例, 搜索栏依旧填写: ^var .*new (\w+).*, 替换栏中输入: \U$1, 最终的结果便是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
REFCLEANERCONTROLLER
TEXTUREANALYSIS
MESHANALYSIS
PROFILERTOOL
ANIMECLIPCOMPRESS
BROKENASSETCHECKER
REFCLEANERMAT
PRECOMBINEMESH
MESHUVVIEWER
PRESTATICBATCHES
GUIDFINDER
ASSETOPERATETOOL
ASSETRENAMETOOL
SOCREATOR
LODBATCHTOOL
MISSINGCHECKER
REMOVEREPEATCHARACTER
ABOUT

一些常用的表达式

不能包含某些字符

  • 整行中不包含汉字

    ^[^\u4e00-\u9fa5]+$

  • 整行中不包含数字

    ^[^\d]+$

  • 整行中不包含字母

    ^[^a-zA-Z]+$

整行中不能包含某些词汇

  • 不包含 "包含"

    ^(.(?!包含))*$

  • 不包含 "Collider"

    ^(.(?!Collider))*$

  • 不包含 "00"

    ^(.(?!00))*$

整行只由某些字符构成

  • 纯汉字

    ^[\u4e00-\u9fa5]+$

  • 纯字母

    ^[a-zA-Z]+$

  • 纯数字

    ^[\d]+$

整行只由某些词汇构成

  • 只有 Android, iOS, PC

    ^((Android)|(iOS)|(PC))+$