preg_replace:反向引用后添加数字

Mig*_*ork 7 php regex backreference escaping

情况

我想在每个之后preg_replace()添加一个数字. '8'[aeiou]

abcdefghij
Run Code Online (Sandbox Code Playgroud)

a8bcde8fghi8j
Run Code Online (Sandbox Code Playgroud)


我该如何写替换字符串?

// input string
$in = 'abcdefghij';

// this obviously won't work ----------?
$out = preg_replace( '/([aeiou])/', '\18',  $in);
Run Code Online (Sandbox Code Playgroud)

只是一个例子,所以建议str_replace()不是一个有效的答案.
我想知道如何在替换字符串中的反向引用后有数字.

Aro*_*olm 19

解决方案是将反向引用包装起来${}.

$out = preg_replace( '/([aeiou])/', '${1}8',  $in);
Run Code Online (Sandbox Code Playgroud)

这将输出a8bcde8fghi8j

请参阅有关此特殊情况的手册,并提供反向引用.

  • 注意单引号。`"${1}8"` 不起作用,因为双引号字符串在 php 中被解析/解释,因此在将字符串传递给函数之前大括号“消失”消失了。 (3认同)
  • 谢谢; 在下次询问之前我应该​​RTFM. (2认同)

jh3*_*314 5

你可以这样做:

$out = preg_replace('/([aeiou])/', '${1}' . '8', $in);
Run Code Online (Sandbox Code Playgroud)

以下是文档中有关反向引用的相关引用:

当使用反向引用后紧跟另一个数字的替换模式时(即:在匹配的模式之后立即放置文字数字),您不能使用熟悉的 \1 表示法进行反向引用。例如,\11 会使 preg_replace() 感到困惑,因为它不知道您是否想要 \1 反向引用后跟文字 1,或者 \11 反向引用后跟什么都没有。在这种情况下,解决方案是使用 \${1}1。这将创建一个孤立的 $1 反向引用,将 1 保留为文字。