2016-10-26 4 views
1

REGEXキャプチャグループの一致をback-referenceに置き換えるこのコードはありますが、一致するテキストは常に切り捨てられていません。数字をエスケープするとどうなりますか?

コード:

$str = 'string is string'; 
$replacement_result = preg_replace("/(\w+) is (\w+)/","\1 this \3", $str); 

echo $replacement_result; 
// results was 'is' 

私はその後、交換用のパラメータ文字列は二重引用符にあったことに気づいたと(私は正常に動作するだろうと思った)数をエスケープしたので、私はシングルに二重引用符を変更私もdocument.write() INGを試してみましたが、Javascriptに番号を逃れと「は、同じ結果(何を)TWAS

$str = 'string is string'; 
                // changes here 
$replacement_result = preg_replace("/(\w+) is (\w+)/",'\1 this \3', $str); 

echo $replacement_result; 
// results was 'string this string' 

引用しています。

これは明らかにこれが私の最初の遭遇であり、非常に簡単な1 - 2行答えがあります。 数字がエスケープされるとどうなりますか?

+0

で、 '「\ 1」は'進文字notatioですn、 '' \ 1 ''は逆参照です。あなたの最初のコードスニペットが実行されたとき、結果は 'is'ではなく、' \ u0001 this \ u0002' –

+0

ええ、最初の結果で間違いを犯しました。 –

答えて

0

official documentationによれば、二重引用符で囲まれた文字列内で、範囲0..71..3数字が続くバックスラッシュのシーケンスが進表記の文字として解釈される:

\[0-7]{1,3}定期的に一致する文字列 式は、PHPで黙っバイトに収まるように をオーバーフロー進表記の文字、(例えば"\400" === "\000"

+0

Ruslanありがとう、stackoverflow私は2mins以内に回答を受け入れることはできません。 –

関連する問題