PHP:正则表达式替换括号之间的部分文本(逗号)

时间:2013-04-01 17:12:12

标签: php regex preg-replace

有人可以请我提供一个正则表达式,它将替换括号内的部分文本吗?

示例:我有字符串

    123 (abc,def) 567

我希望最终得到

    123 (abc def) 567

所以基本上我想在括号之间替换“,”字符。

在此先感谢,我似乎忘记了我对正则表达式的大部分知识。

罗伯特

5 个答案:

答案 0 :(得分:3)

这应该有效:

$s = '123 (abc,def) 567';

echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s);

答案 1 :(得分:1)

有点干净,但很简单。

<?php
$string = '123 (abc,def) 567';

$string = preg_replace('!,!',' ',$string);

echo $string;

?>

输出是:

123 (abc def) 567

按要求。

<强>更新

为了平息投诉,另一个版本将是:

$string = '123 (abc,def) 567';

$string = preg_replace('!([^,]+),(.+)!','$1 $2',$string);

echo $string;

另一个更新,表明我们只删除括号之间的逗号

$string = '123 (abc,def) 567';

$string = preg_replace('!(\([^,)]+),(.+\))!','$1 $2',$string);

echo $string;

这不是原来的问题,要替换括号之间的所有逗号,你可以这样做

$strings = array('123 (abc,def) 567','(),(zefzef)','(,abc)','(def,hij,nop,abc),(abc,) 123');

foreach($strings as $string){
  echo "Before: $string = ";    
    while(preg_match('!(\([^,)]*),(.+\)?)!',$string)){
        $string = preg_replace('!(\([^,)]*),(.+\)?)!',"$1 $2",$string);
    }
  echo "After: $string\n";
}

答案 2 :(得分:0)

修改
如果你没有递归括号,这就像魅力一样:

/,(?=[^(]*?\))/

当然被白色空间所取代。

答案 3 :(得分:0)

这适用于PHP。 (如果你可以使用preg_replace_callback):

 function commas($matches){return str_replace(',',' ',$matches[0]);}
 echo preg_replace_callback('/(\(.*\))/i','commas','123 (abc,def) 567');

或一行:

echo preg_replace_callback('/(\(.*\))/i',create_function('$matches','return str_replace(","," ",$matches[0]);'),'123 (abc,def) 567');

答案 4 :(得分:0)

请检查此正则表达式。这对你有帮助。

,(?=[^\(]*\))

Check demo