9

情况

我想在preg_replace()每个. 例子'8'[aeiou]

abcdefghij

a8bcde8fghi8j


问题

我应该如何编写替换字符串?

// input string
$in = 'abcdefghij';

// this obviously won't work ----------↓
$out = preg_replace( '/([aeiou])/', '\18',  $in);

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

4

2 回答 2

27

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

$out = preg_replace( '/([aeiou])/', '${1}8',  $in);

这将输出a8bcde8fghi8j

请参阅带有反向引用的特殊情况的手册

于 2013-08-02T23:59:01.847 回答
4

你可以这样做:

$out = preg_replace('/([aeiou])/', '${1}' . '8', $in);

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

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

于 2013-08-03T00:00:18.667 回答