我需要将“,”替换为“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> ...
答案 0 :(得分:1)
我认为应该这样做:
$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>
答案 1 :(得分: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
但请注意,这不适用于a,b<c,d<e,f>>
之类的嵌套括号
该示例使用lambda function代替create_function。