正则表达式
语法
-
普通字符
包括所有大写字母, 小写字母,所有数字,所有标点符号和一些其他符号
[ABC]
: 匹配[…]中出现的所有字符(A,B,C)
例: [ABC] 能匹配到 ABCDEFG中的A,B,C[^ABC]
: 匹配除了[^…]中出现过字符
例: [^ABC]能匹配到ABCDEFG中的D,E,F,G[A-Z]
: 匹配所有大写字母;[a-z]
:匹配所有小写字母[\s]
: 匹配所有空白符, 包括换行;[\S]
: 匹配所有非空白符,不包括换行[\w]
: 匹配字母,数字或下划线([A-Za-z0-9]
)
[\b]
: 匹配一个单词边界, 即末字与空格之间位置;[\B]
: 非单词边界
\bCha
匹配Cha开头的单词, \Bter
匹配ter结尾的单词
[\t]
: 匹配一个制表符
-
特殊字符
如果需要匹配,特殊字符, 需要在字符前加
\
进行转义\
: 将下一个字符标记为或特殊字符*
: 匹配前面的子表达式0次, 1次或多次+
: 匹配前面的子表达式1次或多次?
: 匹配前面的子表达式0次或1次.
: 匹配除了(\n, \r)以外任意单个字符[]
: 标记一个中括号表达式的开始和结束位置()
: 标记一个子表达式开始和结束的位置,子表达式可以获取供后续使用^
: 匹配字符串的开始位置, 如果^
在[]中括号表达式内, 表示不包含其字符的内容$
: 匹配字符串结尾{}
: 标记限定表达式的开始和结束位置|
: 指明两项之间的一个选择 -
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
{n}
: 匹配前面表达式出现确定的n次
^[0-9]{3}
表示由三个数字开头的字符串{n,}
: 匹配前面表达式出现至少n次(出现次数>=n){n,m}
: 匹配前面表达式出现n-m次 -
贪婪匹配
* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。如
<h1>正则表达式</h1>
通过<.*>
匹配, 以贪婪匹配 , 则匹配到<h1>正则表达式</h1>
;通过</*?>
非贪婪匹配,则匹配到<h1>
-
查找
?=
: exp1(?=exp2) 查找exp2前面的exp1?<=
: (?<=exp2)exp1 查找exp2后面的exp1?!
: exp1(?!exp2) 查找后面不是exp2的exp1?<!
: (?<!exp2)exp1 查找前面不是exp2的exp1
修饰符
记于表达式之后 /pattern/flag flag即为修饰符
i
: 忽略大小写
g
: 全局匹配
m
: 多行匹配
s
: 使得特殊字符.
包含换行符\n
非获取匹配
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式
(?=pattern)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的**“Windows”**,但不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?<=pattern)
反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"(?<=95|98|NT|2000)Windows
“能匹配”2000Windows
“中的”Windows
",但不能匹配"3.1Windows
“中的”Windows
(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。例如"(?"能匹配"
3.1Windows"中的"
Windows",但不能匹配"
2000Windows"中的"
Windows`