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

但请记住,这不适用于嵌套括号a,b<c,d<e,f>>
,例如示例使用lambda 函数而不是create_function

于 2012-09-14T11:53:32.800 回答