【问题标题】:Regex to match "{number}"正则表达式匹配“{number}”
【发布时间】:2011-03-14 14:15:22
【问题描述】:

我需要将“{Z}”替换为“test(Z)”,其中 Z 始终是使用 PHP 和正则表达式的无符号整数(除非有更快的方法?)。

$code='{45} == {2}->val() - {5}->val()';
// apply regex to $code
echo $code;
// writes: test(45) == test(2)->val() - test(5)->val()

棘手的部分是它需要以关于速度和内存使用的最佳方式完成。

【问题讨论】:

    标签: php regex performance


    【解决方案1】:
    $code = preg_replace('/\{(\d+)\}/', 'test($1)', $code);
    

    根据我的经验,preg_replace 比使用 str_replacestrtr 进行替换的任何方法都快很多

    【讨论】:

      【解决方案2】:

      缺少的行是这样的:

      $code = preg_replace('/{([0-9]+)}/', 'test($1)', $code);
      

      它是如何工作的:

      { 匹配文字 { ( 开始一个捕获组 [0-9]+ 0-9 中的一位或多位数字 ) 结束捕获组 } 匹配文字 }

      替换字符串中的 $1 指的是第一个(也是唯一一个)捕获组捕获的字符串。

      【讨论】:

      • @amphetamachine:我想说,如果您实际上是指 0-9 中的数字,那么您应该写 [0-9]。这清楚地表明您只对那些特定的数字感兴趣,而不对可以解释为数字的其他字符感兴趣。在这种情况下,它没有太大的区别,但我不明白为什么明确是一个“坏习惯”。或许你可以解释一下你的推理?
      • Larry Wall 认为\d[0-9] 更容易输入,更不容易出错。它们的意思是一样的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 2011-05-01
      • 1970-01-01
      相关资源
      最近更新 更多