[正则表达式]基础工具书篇 所有关于?的

Posted wei4118268

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[正则表达式]基础工具书篇 所有关于?的相关的知识,希望对你有一定的参考价值。

?在正则表达式界拥有特别高的地位。因为跟 ?相关的符号太多了。除了之前讲的「表示匹配次数0或1次」以及「表示非贪婪匹配」之外,还有其它的作用,咱们一起码一码。

1. ?:

用来表示子表达式非捕获。
用圆括号包裹的表达式,即子表达式,其匹配到的内容,默认情况下,也会被保存到内存中,以供使用。

比如我们想要在一段html中,拿到一个完整的a标签,还想要拿到这个a标签里的链接地址。
正则表达式可以写为 \\<a href\\="(.*?)"\\>\\<\\/a\\>
在进行匹配时,括号内的匹配结果也会一起返回出来。返回结果的使用方式根据语言不同、使用的函数不同而异,大家可自行查阅。

如果我们在进行匹配时,不需要这个a标签里的链接地址。
正则表达式可以写为 \\<a href\\="(?:.*?)"\\>\\<\\/a\\>

将不需要的子表达式设置为非捕获模式,可以节省内存。

2. ?=

用来表示正向肯定预查。即满足后者条件的前者。
借用一下经典例子,正则表达式 Windows(?=95|98) 会匹配到 Windows95Windows98中的 Windows,而不会匹配到 Windows2000WindowsXP等字符串中的Windows
要注意,它只会匹配出 Windows

3. ?!

用来表示正向否定预查。即不满足后者条件的前者。
正则表达式 Windows(?!95|98) 会匹配到 Windows2000WindowsXP等字符串中的Windows,而不会匹配到 Windows95Windows98中的 Windows
要注意,它只会匹配出 Windows

4. ?<=

用来表示反向肯定预查。即满足前者条件的后者。
正则表达式 (?<=95|98)Windows 会匹配到 95Windows98Windows中的 Windows,而不会匹配到 2000WindowsXPWindows等字符串中的Windows
要注意,它只会匹配出 Windows

5. ?<!

用来表示反向否定预查。即满足前者条件的后者。
正则表达式 (?<!95|98)Windows 会匹配到 2000WindowsXPWindows等字符串中的 Windows,而不会匹配到 95Windows98Windows中的Windows
要注意,它只会匹配出 Windows

6. 一些例子
  1. 匹配后边紧跟着 bca 。比如 abcac 中的第一个 a。 答案是 /a(?=bc)/
    上例中,如果要吧 abc 全部匹配出来,则要使用 /a(?=bc)bc/
  2. 匹配一个字符串中不包含另一个字符串,可以使用 /^((?!xxxx).)*$/
    如何去理解上边正则的具体含义呢?看一个具体的例子。 /^((?!abc).)*$/
    它匹配的是 0或多个(*) 的一类字符。哪一类字符呢,是 (?!abc).,即除了换行符外任意一个字符(.),且这个字符不能是字符串 abc 中的第一 a。所以这个正则可以匹配到没有 abc的字符串。
    有点不明所以?
    首先看 (?!abc),匹配的是一个空位置(不占实际字符,仅仅是个位置),这个位置的右边不能紧跟着字符串 abc。然后看 .,匹配的是上述位置右边的第一个字符。由于 (?!abc) 是不会匹配字符的(参照第一条),所以就可以总结为:不是abc中的a的任意一个字符。

以上是关于[正则表达式]基础工具书篇 所有关于?的的主要内容,如果未能解决你的问题,请参考以下文章

[正则表达式]基础工具书篇 字符

(基础篇) 正则表达式详解

(基础篇) 正则表达式详解

正则表达式-理论基础篇

正则表达式-理论基础篇

[正则表达式]基础工具书篇 匹配次数