正则表达式(含递归用法)

(原创)

正则表达式,日常用于匹配。
简单小记一下:

一、基本

   表示转义
xA9    x 16进制
.     任意字符

a|b   a或b,注意,如果是 a|ab,去匹配 ab ,那么大多数引擎是匹配到 a,只有少数是匹配到ab     
[abc]    set内的或
[a-zA-Z0-9]   范围的一种写法
[^abc]    非set 
^   起始(匹配位置,而不是字符)
$   结束(匹配位置,而不是字符)

   word boundary 单词位置, 这种位置左右边有且仅有一边是字符。

例如: . 匹配 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}    范围 n到m个

三、捕获组 
(groupa)     括号括起来
捕获组可以具有索引值,英文是 backreference,如
(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

四、递归用法:

注意,不是所有语言都支持

例如: ag<0>?b       g<0> 代表递归匹配整个表达式,?还是代表0次或1次 
整个表达式可以匹配 ab ,aabb,aaabbb ......(k个a,k个b)  

原文地址:https://www.cnblogs.com/randomstring/p/10426447.html