PHPのpreg_replaceで$変数を使用する
-
05-07-2019 - |
質問
うーん... preg_replaceの呼び出しで変数を使用するにはどうすればよいですか?
これは機能しませんでした:
foreach($numarray as $num => $text)
{
$patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
$replacements[] = '<ces>$1<$text/>$2</ces>';
}
はい、$num
の前にはプラス記号が付いています。はい、<!> quot; tag the $num as <$text/>
<!> quot;にします。
解決
置換パターンは問題ないように見えますが、一致パターンで一重引用符を使用しているため、$ num変数は挿入されません。代わりに、試してください
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
また、<!> quot; unknown <!> quot;からパターンを構築する場合にも注意してください。このような入力の場合、通常は preg_quote を使用することをお勧めします。例:
$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';
変数名が与えられた場合、それは常に数値であると推測します。
他のヒント
変数は、二重引用符で宣言された文字列。そのため、二重引用符を使用します:
$patterns[] = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";
または文字列連結を使用:
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
変数に正規表現のメタ文字が含まれる可能性がある場合は、 preg_quote
も確認する必要があります。
所属していません StackOverflow