如何用preg_replace替换括号内的逗号

时间:2012-09-14 11:46:44

标签: php preg-replace brackets

我需要将“,”替换为“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> ... 

2 个答案:

答案 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