1

「、」を「enoComma」に置き換える必要がありますが、角かっこ<...>の内側にあるものだけです。
このようにしようとしていますが、角かっこ内の最初のコンマのみが置き換えられます

$text = 'asd, asd <asd, asd, adasd> ... ';
preg_replace_callback("/(<.*?),(.*?>)/",
    create_function('$m', 'return $m[1].\'enoComma\'.$m[2];'),
    $text
);
echo $text; // asd, asd <asdenoComma asd, adasd> ... 
4

2 に答える 2

2

私はこれがそれをするべきだと思います:

$text = 'asd, asd <asd, asd, adasd> ... <a,b,c>';

function replace_function($s) {
  return str_replace(",", "enoComma", $s[0]);
}

$text = preg_replace_callback("|<(.*)>|", "replace_function", $text);

echo "$text\n";

出力:

asd, asd <asdenoComma asdenoComma adasd> ... <aenoCommabenoCommac>
于 2012-09-14T11:52:31.790 に答える
1

すでにpreg_replace_callbackを使用しているので、角かっこの間のすべてをフェッチしてから、コールバックで各カンマをenoCommaに置き換えます。

<?php
$text = 'asd, asd <asd, asd, adasd> asd, asd asd, asd <x, y, z> asd';
$text = preg_replace_callback('/(?<=<)[^<>]+(?=>)/', function($e) {
    return str_replace(',', 'enoComma', $e[0]);
}, $text);
echo $text;

プリント

asd, asd <asdenoComma asdenoComma adasd> asd, asd asd, asd <xenoComma yenoComma z> asd

ただし、これは、 create_functionの代わりにラムダ関数a,b<c,d<e,f>>
を 使用する例のようにネストされたブラケットでは機能しないことに注意してください。

于 2012-09-14T11:53:32.800 に答える