可以加快 PHP 正则表达式

it is possible to speed up PHP regex

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

我的正则表达式代码:\{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.

上测试示例

有没有办法加快我的正则表达式,或者我必须接受那个速度?

您可以使用

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

regex demo

详情

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