2

少し前にbashで書いたスクリプトをPHPに移植しようとしています。1つの特定の行は、英数字以外のすべての文字をエスケープすることです。

bashでは、次のようにワンライナーとして実行できました。

echo "aaa bbb::" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g'
# => aaa\ bbb\:\:

私がPHPで得た最も近いものはこれでした:

echo preg_replace('/([^a-zA-Z0-9])/','\\\','aaa bbb::');
# => aaa\bbb\\

ただし、内部で正規表現グループを再利用するのに苦労していますpreg_replace(\1と$1を試しました)。

誰かがこのPHPワンライナーを正しく入手するのを手伝ってもらえますか?

4

3 に答える 3

3
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:
于 2011-06-06T11:33:36.867 に答える
3

ロケール内のすべての英数字以外の文字を表すために使用[^[:alnum:]]し、円記号をダブルダブルエスケープすることを忘れないでください。

$ cat test.php
#!/usr/bin/env php

<?
echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
?>

$ ./test.php 
aaa\ bbb\:\:
于 2011-06-06T12:02:17.703 に答える
2

試す:

echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');
于 2011-06-06T11:34:12.220 に答える