共计 934 个字符,预计需要花费 3 分钟才能阅读完成。
?
在正则表达式界领有特地高的位置。因为跟 ?
相干的符号太多了。除了之前讲的「示意匹配次数 0 或 1 次」以及「示意非贪心匹配」之外,还有其它的作用,咱们一起码一码。
1. ?:
用来示意子表达式非捕捉。
用圆括号包裹的表达式,即子表达式,其匹配到的内容,默认状况下,也会被保留到内存中,以供应用。
比方咱们想要在一段 HTML 中,拿到一个残缺的 a 标签,还想要拿到这个 a 标签里的链接地址。
正则表达式能够写为 \<a href\="(.*?)"\>\<\/a\>
。
在进行匹配时,括号内的匹配后果也会一起返回进去。返回后果的应用形式依据语言不同、应用的函数不同而异,大家可自行查阅。
如果咱们在进行匹配时,不须要这个 a 标签里的链接地址。
正则表达式能够写为 \<a href\="(?:.*?)"\>\<\/a\>
。
将不须要的子表达式设置为非捕捉模式,能够节俭内存。
2. ?=
用来示意 正向 肯定预查。即满足后者条件的前者。
借用一下经典例子,正则表达式 Windows(?=95|98)
会匹配到 Windows95
或 Windows98
中的 Windows
,而不会匹配到 Windows2000
、WindowsXP
等字符串中的 Windows
。
要留神,它只会匹配出 Windows
。
3. ?!
用来示意 正向 否定预查。即不满足后者条件的前者。
正则表达式 Windows(?!95|98)
会匹配到 Windows2000
、WindowsXP
等字符串中的 Windows
,而不会匹配到 Windows95
或 Windows98
中的 Windows
。
要留神,它只会匹配出 Windows
。
4. ?<=
用来示意 反向 肯定预查。即满足前者条件的后者。
正则表达式 (?<=95|98)Windows
会匹配到 95Windows
或 98Windows
中的 Windows
,而不会匹配到 2000Windows
、XPWindows
等字符串中的 Windows
。
要留神,它只会匹配出 Windows
。
5. ?<!
用来示意 反向 否定预查。即满足前者条件的后者。
正则表达式 (?<!95|98)Windows
会匹配到 2000Windows
、XPWindows
等字符串中的 Windows
,而不会匹配到 95Windows
或 98Windows
中的 Windows
。
要留神,它只会匹配出 Windows
。