欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php反向引用 1 和$1区别?

程序员文章站 2022-06-10 21:53:54
...
php的正则一会看到有人用\1
一会用$1

两个有什么区别?一般用哪个?

回复讨论(解决方案)

在规则串中只能形如 \1
因为 $ 表示行尾,而 \$1 容易产生歧义

对于后期使用,没有区别
而 perl 中本身就是用 $1 这样访问匹配组的


在正则中只能用\1 , 而在替换字符串中两个都可以。

preg_replace中可以包含后向引用\\n 或(php 4.0.4以上可用)$n,语法上首选后者。 每个 这样的引用将被匹配到的第n个捕获子组捕获到的文本替换。 n 可以是0-99,\\0和$0代表完整的模式匹配文本。 捕获子组的序号计数方式为:代表捕获子组的左括号从左到右, 从1开始数。如果要在replacement 中使用反斜线,必须使用4个("\\\\",译注:因为这首先是php的字符串,经过转义后,是两个,再经过 正则表达式引擎后才被认为是一个原文反斜线)。

当在替换模式下工作并且后向引用后面紧跟着需要是另外一个数字(比如:在一个匹配模式后紧接着增加一个原文数字), 不能使用\\1这样的语法来描述后向引用。比如, \\11将会使 preg_replace() 不能理解你希望的是一个\\1后向引用紧跟一个原文1,还是 一个\\11后向引用后面不跟任何东西。 这种情况下解决方案是使用\${1}1。 这创建了一个独立的$1后向引用, 一个独立的原文1。

引用自php手册 preg_replace