Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 冒号:在正则表达式中是什么意思?_Php_Regex_Preg Match - Fatal编程技术网

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您共享的链接对我很有帮助。