Ruby:在字符串中查找前N个正则表达式匹配(并停止扫描)

时间:2016-09-08 08:23:37

标签: ruby regex performance

想要扫描非常长的字符串以进行正则表达式匹配。想知道找到第一个N正则表达式的最有效方法是什么。例如类似的东西:

'abcabcabc'.scan /b/, limit: 2
如果只扫描支持限制选项,

将在5个字符后成功结束。

(字符串是几MB - 内存中的一个记忆数据结构 - 这是一个Web请求。感觉很重要。)

2 个答案:

答案 0 :(得分:3)

不那么优雅,但你可以使用阻止形式:

# ***********************************************
# Test Environment Details
# ***********************************************

# Application URL pointing to test execution
#gStrApplicationURL =XXXXXXXXXXXXXXXX/webservices/person
#gStrApplicationURL = XXXXXXXXXXXXXX/GuestAPIService/ProxyServices/

# FOR JSON
#gStrApplicationURL = XXXXXXXXXXXXXX

#SOAP_gStrApplicationURL =XXXXXXXXXXXXXXXXXXXXXXX
#(FOR WSDL PARSING)
version = 5
#v9
#SOAP_gStrApplicationURL = XXXXXXXXXXX/XXXXXXXXX/XXXXXXXXX/
#v5
SOAP_gStrApplicationURL = XXXXXXXXXXXXXXX/OWS_WS_51/
gStrApplicationXAIServerPath=
gStrEnvironmentName=XXXXXXXXX
gStrOwsEnv = XXXXXXXXXXXXXXXXXXXX/OWS_WS_51/
gStrConnectEnv = XXXXXXXXXXXXXXXXX/OWSServices/Proxy/
gStrSubscriptionKey =XXXXXXXXXXXXXXXXXXXXXX

答案 1 :(得分:1)

幸运的是,Ruby正则表达式支持lazy matching,因此您可以像这样使用它:

'abcabcabc'.match(/(b).*?(b)/)

?之后添加.*使其成为懒惰,在正则表达式完成后立即停止。来自Regexp class repetition documentation

  

默认情况下,重复是贪婪的:尽可能多地匹配,同时仍然允许整体匹配成功。相比之下,懒惰匹配使得整体成功所需的最小匹配量最小化。贪婪的元字符可以通过跟随它来变得懒惰。