[正则表达式]基础工具书篇 所有关于?的
Posted wei4118268
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[正则表达式]基础工具书篇 所有关于?的相关的知识,希望对你有一定的参考价值。
?
在正则表达式界拥有特别高的地位。因为跟 ?
相关的符号太多了。除了之前讲的「表示匹配次数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
。
6. 一些例子
- 匹配后边紧跟着
bc
的a
。比如abcac
中的第一个a
。 答案是/a(?=bc)/
。
上例中,如果要吧abc
全部匹配出来,则要使用/a(?=bc)bc/
。 - 匹配一个字符串中不包含另一个字符串,可以使用
/^((?!xxxx).)*$/
。
如何去理解上边正则的具体含义呢?看一个具体的例子。/^((?!abc).)*$/
。
它匹配的是 0或多个(*) 的一类字符。哪一类字符呢,是(?!abc).
,即除了换行符外任意一个字符(.),且这个字符不能是字符串abc
中的第一a
。所以这个正则可以匹配到没有abc
的字符串。
有点不明所以?
首先看(?!abc)
,匹配的是一个空位置(不占实际字符,仅仅是个位置),这个位置的右边不能紧跟着字符串abc
。然后看.
,匹配的是上述位置右边的第一个字符。由于(?!abc)
是不会匹配字符的(参照第一条),所以就可以总结为:不是abc
中的a
的任意一个字符。
以上是关于[正则表达式]基础工具书篇 所有关于?的的主要内容,如果未能解决你的问题,请参考以下文章