1

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

示例:我有字符串

    123 (abc,def) 567

我想结束

    123 (abc def) 567

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

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

罗伯特

4

5 回答 5

4

这应该有效:

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

echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s);
于 2013-04-01T17:16:07.080 回答
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";
}
于 2013-04-01T17:16:58.057 回答
0

编辑:
如果你没有递归括号,这就像一个魅力:

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

当然换成一个空格。

于 2013-04-01T17:26:10.543 回答
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');
于 2013-04-01T18:04:42.720 回答
0

请检查此正则表达式。这将对您有所帮助。

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

检查演示

于 2013-12-24T12:56:49.580 回答