关于regexp性能
给定字符串关于regexp性能,regex,Regex,给定字符串ab 考虑到这个正则表达式模式 (a)(b) 如果我们需要删除完整字符串,但打印第二组,我们可以编写2个变量: 1) preg#u replace(“#(a)(b)#”,“$2”,“ab”)//保存两个组 而且: 2) preg#u replace(“#(?:a)(b)#”,“$1”,“ab”)//不保存第一组 哪种变体性能更好 哪种变体性能更好 要么 如果你只需要做几次更换,那根本没关系。 万一你必须做数百万的替换,你必须考虑另一种格式的源数据,这将需要更少的解析。 但不管怎样,现
ab
考虑到这个正则表达式模式
(a)(b)
如果我们需要删除完整字符串,但打印第二组,我们可以编写2个变量:
1) preg#u replace(“#(a)(b)#”,“$2”,“ab”)//保存两个组
而且:
2) preg#u replace(“#(?:a)(b)#”,“$1”,“ab”)//不保存第一组
哪种变体性能更好
哪种变体性能更好
要么
如果你只需要做几次更换,那根本没关系。
万一你必须做数百万的替换,你必须考虑另一种格式的源数据,这将需要更少的解析。
但不管怎样,现在计算机速度很快。我是说快。
速度足够快,可以运行基于JSON或XML的应用程序,而JSON或XML解析需要的资源远远超过所讨论的简单regexp。它们运行良好。因此,我怀疑您是否会面临这样一种情况,即这样一个regexp会影响任何东西我在一个紧密的循环中运行了每个操作5000000次,并比较了时间。我实际上比较了四种操作:
preg_replace("#(a)(b)#", "$2", "ab");
preg_replace("#(?:a)(b)#", "$2", "ab");
preg_replace("#a(b)#", "$2", "ab");
preg_replace("#a(?=b)#", "", "ab");
我没有看到时间上的一致性差异,因此我认为这实际上对性能没有多大影响,也就是说,我会从设计/语义角度选择最有意义的
#1和#2的表现大致相同#2看起来稍微快一点,但有时慢一点(可能是由于服务器噪音)#3始终比3快约5%,选项4比3快约2%(即,它似乎是最好的,可能是因为它不需要捕获或插值任何内容)
不过,我还是会选择最有意义的
我意识到,str_替换(“ab”、“b”、“ab”)
可能不是类似的,但如果可以,请使用它。它的速度始终是其他任何问题的两倍以上。嗨,我已经删除了第二个问题。你仍然可以在另一个帖子中提问。你应该在每篇文章中只问一个问题。@sashoalm好的,谢谢,明白了。这也是一个PHP问题吗?我会重新标记的,第二个应该更快。。但是从这个过于简单的例子来看,“#a(b)#”,“1美元”
会更好,我相信。为什么不运行一个简单的测试,看看哪个更快呢?@OTARIKI是的;我重考了几次,但似乎没什么不同。哦,我的英语…:)我的意思是,在#2的例子中,在替换中有$2
,但你在这里的意思是$1
,对吗?:)非常感谢你的回答