Php 冒号:在正则表达式中是什么意思?
在某些模式中,我看到使用了冒号Php 冒号:在正则表达式中是什么意思?,php,regex,preg-match,Php,Regex,Preg Match,在某些模式中,我看到使用了冒号:。例如: (?:"[^"]*[^-]?>)|(?:[^\w\s]\s*\/>)|(?:>") 这应该匹配具有:但也匹配以下内容的内容: "><script>alert("hello")</script> 警报(“你好”) 这里面没有冒号。冒号在这个上下文中有特殊意义吗?有人能解释一下吗 编辑 我认为这些链接全面解释了关于正则表达式的所有内容。这与我的主题无关。@chris85和@sin给出了答案。谢谢。高级正则
:
。例如:
(?:"[^"]*[^-]?>)|(?:[^\w\s]\s*\/>)|(?:>")
这应该匹配具有:
但也匹配以下内容的内容:
"><script>alert("hello")</script>
警报(“你好”)
这里面没有冒号。冒号在这个上下文中有特殊意义吗?有人能解释一下吗
编辑
我认为这些链接全面解释了关于正则表达式的所有内容。这与我的主题无关。@chris85和@sin给出了答案。谢谢。高级正则表达式需要特殊构造来传播含义 到目前为止,最高级的正则表达式构造是简单的打开/关闭分组
(..)
和是分隔符
它表示范围限定的一组构造的开始和结束
此结构通过添加某些添加到打开分隔符的字符
(
它告诉引擎该组代表什么。
为了便于使用,为了表示复杂构造的开始,问号
?
紧跟在打开的paren后面,就像这样(?
下面是一个或多个字符,它们唯一地标识组所做的工作 下面是一个(不完整的)开放分隔分组结构列表
(
捕获组(?
修改器组(?:
群集组(?#
评论组(?|
分支重置组(?”
命名捕获组(?
原子组
(?=
正向前瞻断言组(?!
负先行断言组(?
(?&
递归组
(?(
条件组
(?*
回溯控制组
(?{
断言代码组
(?{
regex注入代码组
(?C
标注代码组
引擎必须支持所有这些组分隔符才能识别
您可以看到此开放分隔符序列中使用的唯一元字符
是(
和?
但是,它们按顺序一起使用,构成了一个特殊分组结构的开始
有时,视觉上您可能会错过这些硬编码的结构。
因此,提前了解这些信息符合用户的利益,这样您就不会
当您看到类似于(?:?)
的内容时会感到困惑
希望这有帮助
这里只是一个提示。
他们使用(
然后?
表示高级
分组构造是一个非常聪明的想法
如果引擎不支持特定的分组构造,
它将假定?
是一个量词
但是,当打开的paren(
是元字符时,您无法对其进行量化。
即,不是转义文字
\(?
The?:
是一个非捕获组。这是我看到的唯一使用冒号的用法。您可以在这里看到匹配的内容和原因。谢谢@chris85您共享的链接对我很有帮助。