想要扫描非常长的字符串以进行正则表达式匹配。想知道找到第一个N正则表达式的最有效方法是什么。例如类似的东西:
'abcabcabc'.scan /b/, limit: 2
如果只扫描支持限制选项,将在5个字符后成功结束。
(字符串是几MB - 内存中的一个记忆数据结构 - 这是一个Web请求。感觉很重要。)
答案 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:
默认情况下,重复是贪婪的:尽可能多地匹配,同时仍然允许整体匹配成功。相比之下,懒惰匹配使得整体成功所需的最小匹配量最小化。贪婪的元字符可以通过跟随它来变得懒惰。