@ 字符串内的\字符不转义,完全保留原字符
字符转义
c ASCII符
x 十六进制
u Unicode字符
字符类
[] 匹配单个字符 例"lane"
中的 "a"
和 "e"
^ 非的意思
[^] 即匹配除了^后面的以外的字符 例"reign"
中的 "r"
、"g"
和 "n"
[A-Z] -即范围
. 通配符即any
\p和\P Unicode通用类别或命名块(度娘知道)中的,p为匹配字符,P为匹配以外字符。
\w 单词字符(字母数字) \W 非单词字符
\s 空白字符 \S 非空白(一般与其它组合使用)
\d 十进制 \D 非十进制
定位点
^ 头开始匹配
$ 尾开始匹配
\A 匹配结果一定在开头
\Z \z 匹配结果一定在结尾,Z比z多一个可在\n之前
\G 必须从上一个匹配结束处开始匹配
\b \b 必须匹配在这之间 \B 必须不在之间
数量词(以下都是匹配上一个元素)
? 匹配上一个元素一次或零次
+ 一次或多次
* 零次或多次
{n} 刚好n次
{n,} n次及以上
{n,m} n到m次
*? +? ?? 这三个都是兼。即零或多次,一或多次,零或一次,但是匹配次数都尽量少。例如:abaaaaabb用a.*b去匹配,会匹配到abaaaaabb(默认贪婪匹配),如果用这几个就可以尽可能匹配次数少,像a.*?b就只匹配到ab。
{n}? {n,}? {n,m}? 三个同理,匹配恰好n个,n个尽可能少,n到m个尽可能少。
分组构造
(?= subexpression) | 零宽度正预测先行断言。 | \w+(?=\.) | "He is. The dog ran. The sun is out." 中的 "is"、 "ran" 和 "out" |
(?! subexpression) | 零宽度负预测先行断言。 | \b(?!un)\w+\b | "unsure sure unity used" 中的 "sure" 和 "used" |
(?<=subexpression) | 零宽度正回顾后发断言。 | (?<=19)\d{2}\b | "1851 1999 1950 1905 2003" 中的 "99"、"50"和 "05" |
(?<! subexpression) | 零宽度负回顾后发断言。 | (?<!wo)man\b | "Hi woman Hi man" 中的 "man" |
拿这几个例子来说,分别是1最后一个字符必须是.,2开头字符不能是un,3开头字符必须是19,4开头字符不能是wo。
(?> subexpression) | 非回溯(也称为"贪婪")子表达式。 |
这个就字面意思,匹配过程不回溯。
还有几个分组构造不太理解,会了再来写。