有人可以为我提供一个regexp,这将取代括号之间的文本的一部分?
示例:我有字符串
123 (abc,def) 567
我想以
结尾 123 (abc def) 567
基本上我想替换括号之间的","字符。
提前感谢,我似乎已经忘记了我所知道的关于正则表达式的大部分知识。
罗伯特应该可以:
$s = '123 (abc,def) 567';
echo preg_replace('/('([^)]*),([^)]*'))/', '$1 $2', $s);
有点干净,但很简单。
<?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";
}
Edit:
如果没有递归括号,这将非常有用:
/,(?=[^(]*?'))/
当然是用空格代替
这在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');
请检查此正则表达式。这对你有帮助。
,(?=[^'(]*'))
检查演示