这是代码:$string="{1},[2],(3),<4>";// Replaces closing square, curly, angle brackets with round brackets$string = preg_replace('/\{\[\</', '(', $string);$string = preg_replace('/\}\]\>/', ')', $string);它根本没有替换那个字符串......还有比这更好的编码吗?谢谢。
3 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
这里不需要正则表达式:
$string = str_replace(['{','[','<'], '(', str_replace(['}',']','>'], ')', $string));
或者使用一次调用,strtr
但数组会更长。
湖上湖
TA贡献2003条经验 获得超2个赞
您可以使用
$string="{1},[2],(3),<4>";
$what = ['~[{[<]~', '~[]}>]~'];
$with = ['(', ')'];
$string = preg_replace($what, $with, $string);
echo $string;
这里,
[{[<]-匹配三个字符之一的字符类:{, [或<
[]}>]- 匹配三个字符之一:], }or >(注意,]当它是类中的第一个字符时,字符类内部不必转义)。
请参阅PHP 演示。
您也可以使用单个调用preg_replace_callback:
$string = preg_replace_callback('~([{[<])|[]}>]~', function ($m) {
return !empty($m[1]) ? "(" : ")";
}, $string);
请参阅此 PHP 演示。
该([{[<])模式将开始标点捕获到组 1 ( $m[1]) 中,如果找到匹配项后组不为空,(则返回,否则)替换为。
- 3 回答
- 0 关注
- 208 浏览
添加回答
举报
0/150
提交
取消