可以加快 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}
详情
\{if\s
- {if
和一个空格
(.+?)
- 第 1 组:任意一个或多个字符,尽可能少
}
- 一个 }
字符
\R
- 任何换行序列
((?>(?!\{\/?if[}\s]).|(?R))*?)
- 第 2 组:除以 {/if
或 {if
+空白字符序列开头的字符以外的任何字符,或整个模式递归 0 次或多次,但越少越好
\{\/if}
- {/if}
文本
我试过写一个快速的正则表达式,但是当我测试它时,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}
详情
\{if\s
-{if
和一个空格(.+?)
- 第 1 组:任意一个或多个字符,尽可能少}
- 一个}
字符\R
- 任何换行序列((?>(?!\{\/?if[}\s]).|(?R))*?)
- 第 2 组:除以{/if
或{if
+空白字符序列开头的字符以外的任何字符,或整个模式递归 0 次或多次,但越少越好\{\/if}
-{/if}
文本