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 に答える