(原创,谢绝转载)
正则表达式,日常用于匹配。
简单小记一下:
一、基本
\ 转义
\xA9 16进制数字符
. 任意字符
a|ab 或,注意,如果是ab的话,大多数引擎是匹配到 a,只有少数是匹配到ab
[abc] 也是或
[a-zA-Z0-9] 范围的一种写法
[^] 反向set
^ 起始
$ 结束
谈一下 \b,这个是匹配位置,这种位置左右边有且仅有一边是字符。
例如: \b.\b 匹配 abc def ghi 三个单词中间的两个空格
二、数量,懒惰,独占
? 0-1
?? lazy
?+ Possessive ,不回溯,
例如,abc?+c ,abcc 能行,abc 不行
* 0-无穷
*? lazy
*+ Possessive ,不回溯
+ 1-无穷
+? lazy
++ Possessive ,不回溯
例如: abc++c
a{n} n个a
a{n,m} 范围
三、捕获组
(groupa)
具有索引值
(abc|def)=\1 匹配 abc=abc
原子组,不回溯:
a(?>bc|b)c 匹配abcc,abc不行
向前向后:
a(?=b)
a(?!b)
(?<=a)b
(?<!a)b
索引(backreference)编码
(str1)(str2(str3))(str4)
str1 索引1,str2(str3) 整体索引2 ,str3 索引3 ,str4 索引4
四、递归用法:
不是所有语言都支持
例如: a\g<0>?b \g<0> 代表递归匹配整个表达式,?还是代表0次或1次
整个表达式可以匹配 ab ,aabb,aaabbb ......(k个a,k个b)