【问题标题】:it is possible to speed up PHP regex可以加快 PHP 正则表达式
【发布时间】:2020-06-09 10:25:15
【问题描述】:

我尝试编写一个快速的正则表达式,但是当我测试它时,PHP (preg_replace_callback) 将有 houndres 的步骤来获得结果,我认为这不是一个好的性能 - 必须更快。

我的正则表达式代码:\{if\s{1}(.+?)\}\n(((?R)|.*?)+)\{\/if\}

代码,应该被解析(递归):

{if $name == 'Tree'}
    Hey, this is a Tree!
{/if}

{if $name == 'Example'}
    {if $number == '1'}
        Hey, this is an Example with the number 1
    {/if}
{/if}

您可以在 regex101 here 上测试示例。

有没有办法加快我的正则表达式的速度,还是我必须接受这个速度?

【问题讨论】:

  • \{if\s(.+?)}\R((?>(?!\{\/?if[}\s]).|(?R))*?)\{\/if} ?
  • 是的,就像那样!它比我的正则表达式快一点!

标签: php regex preg-replace preg-replace-callback


【解决方案1】:

你可以使用

(?s)\{if\s(.+?)}\R((?>(?!\{\/?if[}\s]).|(?R))*?)\{\/if}

regex demo

详情

  • \{if\s - {if 和一个空格
  • (.+?) - 第 1 组:任意一个或多个字符,尽可能少
  • } - 一个 } 字符
  • \R - 任何换行序列
  • ((?>(?!\{\/?if[}\s]).|(?R))*?) - 第 2 组:除以 {/if{if+空格字符序列开头的字符以外的任何字符,或整个模式递归 0 次或多次,但尽可能少
  • \{\/if} - {/if} 文字

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2018-10-06
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2013-05-30
    相关资源
    最近更新 更多