【问题标题】:How to replace any brackets for rounded brackets using Regular Expression?如何使用正则表达式替换圆括号的任何括号?
【发布时间】:2019-06-17 18:03:03
【问题描述】:

代码如下:

$string="{1},[2],(3),<4>";
// Replaces closing square, curly, angle brackets with round brackets
$string = preg_replace('/\{\[\</', '(', $string);
$string = preg_replace('/\}\]\>/', ')', $string);

它根本没有替换那个字符串...有比这更好的编码吗?

谢谢。

【问题讨论】:

  • 代码中的注释应该是://用圆括号替换方括号、花括号、尖括号

标签: php regex string preg-replace


【解决方案1】:

除非您需要正则表达式,否则请避免使用它们。这可以通过简单的字符串替换来完成,例如

<?php
$string = "{1},[2],(3),<4>";
$string = strtr($string, ['{' => '(', '}' => ')', '[' => '(', ']' => ')', '<' => '(', '>' => ')']);

【讨论】:

    【解决方案2】:

    你可以使用

    $string="{1},[2],(3),<4>";
    $what = ['~[{[<]~', '~[]}>]~'];
    $with = ['(', ')'];
    $string = preg_replace($what, $with, $string);
    echo $string;
    

    这里,

    • [{[&lt;] - 与三个字符之一匹配的 character class{[&lt;
    • []}&gt;] - 匹配三个字符之一:]}&gt;(请注意,字符类中的 ] 在是类中的第一个字符时不必转义)。

    请参阅PHP demo

    您也可以对preg_replace_callback 进行一次调用:

    $string = preg_replace_callback('~([{[<])|[]}>]~', function ($m) {
        return !empty($m[1]) ? "(" : ")";
     }, $string);
    

    this PHP demo

    ([{[&lt;]) 模式将开始标点符号捕获到第 1 组 ($m[1]) 中,如果在找到匹配项后该组不为空,则返回 (,否则,) 将替换为。

    【讨论】:

      【解决方案3】:

      {[&lt; 永远不会出现在您的字符串中。使用字符类或可选分组。

      $string = preg_replace('/[{[<]/', '(', $string);
      $string = preg_replace('/[}>\]]/', ')', $string);
      

      替代的非字符类方法:

      $string = preg_replace('/(?:\{|<|\[)/', '(', $string);
      $string = preg_replace('/(?:\}|>|\])/', ')', $string);
      

      https://3v4l.org/URvcb

      【讨论】:

      • (?:\{|&lt;|\[) 的效率远低于字符类[{&lt;[]
      • 这应该由单个 preg_replace() 调用执行,正如 Wiktor 所示。
      【解决方案4】:

      这里不需要正则表达式:

      $string = str_replace(['{','[','<'], '(', str_replace(['}',']','>'], ')', $string));
      

      或者使用一次调用strtr,但数组会更长。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 2014-11-22
        相关资源
        最近更新 更多