Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
GREP-Regex+;(加)vs.*(星)性能_Regex_Performance_Grep - Fatal编程技术网

GREP-Regex+;(加)vs.*(星)性能

GREP-Regex+;(加)vs.*(星)性能,regex,performance,grep,Regex,Performance,Grep,简单的问题,假设我有两个正则表达式 rtmp.*?\b/ rtmp.+?\b/ 这似乎是微不足道的差异,如果有任何对我所做的测试 我理解这两种表达方式在技术上的区别。就我而言,两者都可以。正如问题所述,我只是想问一下性能差异(如果有的话)。我注意到的一个区别是+需要egrep grep 'rtmp.*?\b/' egrep 'rtmp.+?\b/' 选择一个更适合你的需要; 性能差异可以忽略不计 *星号表示前面的元素为零或更多。 +加号表示前面有一个或多个元素。这两个表达式: rtmp.*

简单的问题,假设我有两个正则表达式

rtmp.*?\b/
rtmp.+?\b/
这似乎是微不足道的差异,如果有任何对我所做的测试

我理解这两种表达方式在技术上的区别。就我而言,两者都可以。正如问题所述,我只是想问一下性能差异(如果有的话)。我注意到的一个区别是
+
需要
egrep

 grep 'rtmp.*?\b/'
egrep 'rtmp.+?\b/'

选择一个更适合你的需要; 性能差异可以忽略不计

*
星号表示前面的元素为零或更多。
+
加号表示前面有一个或多个元素。

这两个表达式:

rtmp.*?\b/
rtmp.+?\b/
匹配不同的东西
*
表示“零个或多个上一个表达式”(即任何数字),
+
表示“一个或多个上一个表达式”。因此,
*?
在非贪婪模式下匹配任意数量的字符,
+?
在非贪婪模式下匹配任意数量的正字符


速度差异无关紧要,请使用符合您意图的表达。

我注意到的一个差异是
+
需要
grep-E

grep 'http.*f4m'

grep -E 'http.+f4m'

它们用于不同的用途?@userunknown问号用于使
+
*
成为“非贪婪的”——即,它们将使用尽可能少的字符(并且仍然使整个正则表达式匹配),而不是尽可能多的字符(默认)。看看这个性能是否很关键,我认为
rtmp\w*+
应该是最快的,但不要期望太多,特别是因为您只匹配了几个字符。一般来说,惰性量词意味着更多的回溯,这有点昂贵,但所有格量词不能回溯。@StevenPenny。我回答说,差别可以忽略不计……:)