====================================================================================================================================================================================================================================================================(?:X)在正则中表示所匹配的子组X不作为结果输出正常情况(X)中的X会被作为新增的一个组序号输出,比如(A)(B),A的序号1,B的序号2如果(?:A)(B),A将没有序号不输出,B的序号为1
?: 是 不想被捕获的时候使用 可以提高程序执行速度比如 ([a-z][0-9])+ 这个正则表达式里 ( ) 里面的内容被捕获了, 反向引用的时候可以用上 。一般正则替换的时候用的多 像UBB代码 但是 如果写成 (?:[a-z][0-9])+ 跟上面 正则表达式 整体匹配是一样的 就是 不会捕获 ( )里内容了。也就是不能使用 反向引用如果还是不太理解, 那就先了解一下 反向引用吧。
追问
不理解。能不能详细点。
回答
比如 PHP 手册里 有个 正则替换的函数 preg_replace 有的列子 $string = 'April 15, 2003'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '${1}1,$3'; echo preg_replace($pattern, $replacement, $string); // 结果显示 April1,2003 这里就用上了 反响引用 $replacement 里的 ${1} 代表 (\w+) , $3代表 第2个 (\d+) 这个正则表达式 里 一共有 3个 () 也就是 可以 用 $1 $2 $3 调用 3个()里的 内容。 也可以使用 \1 \2 \3 来 代替 $1 $2 $3 都是一样的 那接下来 如果把 代码里的 正则表达式 改成下面的 $pattern = '/(?:\w+) (?:\d+), (\d+)/i'; 那 这里 只有 一个 () 里的 内容 能使用 带 ?:的 ()里面内容是不会被 捕获的 ,所以 只能使用 $1 代表最后的 (\d+)=========================================================================================本文转自:http://blog.csdn.net/cui_shuang_xi/article/details/42529643