0

preg_replace引用符で囲まれていない場合、式の右側を引用するために使用する正規表現を構築しようとしています。

myvar = 3なりmyvar = '3'ます。連続する引用符で囲まれていない文字列のみを処理する必要があります(したがって、最初の文字列にスペースがある場合は、引用符で囲む必要があります。たとえば、myvar = 3 5になりmyvar = '3' 5ます)。

また、引用符で囲まれた文字列を無視したいので、myvar = 'this is quoted'変更しないでください。

これまでのところ、以下のコードがあります。

$str = 'myvar = 3';
$regex = '/([\w\@\-]+) *(\=|\>|\>\=|\<|\<\=) *([\w]+)/i';
$replace = '\1 \2 \'\3\'';
$result = preg_replace($regex, $replace_str, $str);

$regexこの作業を行うには何を入れる必要がありますか?

4

2 に答える 2

0

私は最終的に次のことに落ち着きました:

$str = 'myvar = 3';
$regex = '/([\w\@\-]+) *(\=|\>|\>\=|\<|\<\=) *([^\s\']+)/i';
$replace = '\1 \2 \'\3\'';
$result = preg_replace($regex, $replace_str, $str);

複数ステップの操作の 1 つのステップとしてこれが必要だったので、問題のこの正規表現を使用して、一度にすべてを実行する uber 正規表現を作成したいと考えました。preg_replaceただし、 「検索」および「置換」配列を供給することもできることが判明したため、最終的な解決策としてそれを使用しました。その方が把握しやすいとも言えます。

乾杯。

于 2012-12-30T12:43:10.833 に答える
0

preg_replace_callback を使用するか、これでうまくいく可能性があります (正規表現の右側のみ):

#([^\'\"])(\w+)([^\'\"])#

そして、次のように置き換えます。

$exp = '#([^\'\"])(\w+)([^\'\"])#';
$str = 'This is unquoted';
$quoted = preg_replace($exp, '\'$1$2$3\'', $str); // should hopefully be 'This is unquoted' after. Not tested.

ただし、これは一種のハッキーな回避策です。

編集:はい、ダメです。その場合は preg_replace_callback をお勧めします。

于 2012-12-29T22:47:21.640 に答える