Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于regexp性能_Regex - Fatal编程技术网

关于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
,对吗?:)非常感谢你的回答