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。我回答说,差别可以忽略不计……:)