有人可以请我提供一个正则表达式,它将替换括号内的部分文本吗?
示例:我有字符串
123 (abc,def) 567
我希望最终得到
123 (abc def) 567
所以基本上我想在括号之间替换“,”字符。
在此先感谢,我似乎忘记了我对正则表达式的大部分知识。
罗伯特
答案 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)