PHP:regexp替换括号之间的部分文本(逗号)
有人能给我提供一个regexp来替换括号之间的部分文本吗 示例:我有字符串PHP:regexp替换括号之间的部分文本(逗号),php,regex,preg-replace,Php,Regex,Preg Replace,有人能给我提供一个regexp来替换括号之间的部分文本吗 示例:我有字符串 123 (abc,def) 567 我想和你在一起 123 (abc def) 567 基本上我想替换括号中的“,”字符 提前感谢,我似乎已经忘记了我所知道的关于正则表达式的大部分内容 罗伯特这应该行得通: $s = '123 (abc,def) 567'; echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s); 这应该起作用: $s =
123 (abc,def) 567
我想和你在一起
123 (abc def) 567
基本上我想替换括号中的“,”字符
提前感谢,我似乎已经忘记了我所知道的关于正则表达式的大部分内容
罗伯特这应该行得通:
$s = '123 (abc,def) 567';
echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s);
这应该起作用:
$s = '123 (abc,def) 567';
echo preg_replace('/(\([^)]*),([^)]*\))/', '$1 $2', $s);
有点干净,但很简单
<?php
$string = '123 (abc,def) 567';
$string = preg_replace('!,!',' ',$string);
echo $string;
?>
按要求
更新
为了平息投诉,另一个版本是:
$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";
}
有点干净,但很简单
<?php
$string = '123 (abc,def) 567';
$string = preg_replace('!,!',' ',$string);
echo $string;
?>
按要求
更新
为了平息投诉,另一个版本是:
$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";
}
编辑:如果没有递归括号,这将像一个符咒:
/,(?=[^(]*?\))/
当然会被一个空白代替。编辑:如果没有递归括号,这将像一个符咒:
/,(?=[^(]*?\))/
当然,它被一个空格所取代。这在PHP中是有效的。(如果可以使用preg_replace_回调):
或者在一行中:
echo preg_replace_callback('/(\(.*\))/i',create_function('$matches','return str_replace(","," ",$matches[0]);'),'123 (abc,def) 567');
这在PHP中工作。(如果可以使用preg_replace_回调):
或者在一行中:
echo preg_replace_callback('/(\(.*\))/i',create_function('$matches','return str_replace(","," ",$matches[0]);'),'123 (abc,def) 567');
请检查这个正则表达式。这对你有帮助
,(?=[^\(]*\))
请检查此正则表达式。这对你有帮助
,(?=[^\(]*\))
括号内是否有多个逗号,您需要全部替换?如果是这样,我认为你不可能一步到位。您必须拉出括号之间的文本,替换所有逗号(用普通的
str_replace
),然后替换原始字符串中的逗号。@user13955是否有递归括号?括号内是否有多个逗号,您需要全部替换?如果是这样,我认为你不可能一步到位。您必须拉出括号之间的文本,替换所有逗号(用普通的str_replace
),然后替换原始字符串中的逗号。@user13955是否有递归括号?这也将替换括号外的逗号。这不会检查括号,也可以是$string=str_replace(“,”,“,$string”)代码>@Barmar他在最初的请求中没有这么说。他提到的括号只是他想要发生的事情的英文描述。@Kolink你不能假设他会根据这个问题输出任何需要逗号(比如数组)的东西。感谢-1的正确回答。他的问题清楚地说“替换括号之间的一部分文字”。他的示例在括号外没有逗号这一事实并不能否定这一点。这也将替换括号外的逗号。这不会检查括号,最好是$string=str_replace(“,”,“,”,$string)代码>@Barmar他在最初的请求中没有这么说。他提到的括号只是他想要发生的事情的英文描述。@Kolink你不能假设他会根据这个问题输出任何需要逗号(比如数组)的东西。感谢-1的正确回答。他的问题清楚地说“替换括号之间的一部分文字”。他的例子在括号外没有逗号这一事实并不能否定这一点。不,不应该。(),(zefzef)将匹配。不,不应该。(),(zefzef)将被匹配。*
需要在分组括号内。是的,当然,无论如何,如果他可以有递归括号,它将不起作用。*
需要在分组括号内。是的,当然,无论如何,如果他可以有递归括号,它将不起作用。