2017-08-11 116 views
0

我有一个字符串,其可以是另一文件以包括或与参数诸如文件:匹配正则表达式捕获

#include virtual="myfile.html" 
#include virtual="myfile.html?arg=1" 

正则表达式中提取应该既文件和PARAM,例如是这样的:

m = line.match(/#include virtual=\"(?<vfile>\S+)(?<param>\?+\S+)\"/) unless line.empty? 

除非上面的代码,它仅适用于如果有一个myfile.html东西= 1

我缺少什么?

+0

请出示您的示例所需的返回值(s)。 –

+1

因为这似乎是一个URL,所以我把它作为一个整体取出,并通过'URI('myfile.html?arg = 1')在第二步中提取查询字符串。查询' – Stefan

+0

@Stefan有趣的想法。谢谢! – farhany

回答

1

更新您的模式,包括结束标记之前懒惰的搜索和可选的最后捕获组:

/#include virtual=\"(?<vfile>\S+?)(?<param>\?+\S+)?\"/ 

Demo

2
def extract(str) 
    str[str.index('="')+2..-2].split('?') 
end 

extract '#include virtual="myfile.html"'  #=> ["myfile.html"] 
extract '#include virtual="myfile.html?arg=1"' #=> ["myfile.html", "arg=1"] 

,或者根据要求,

def extract(str) 
    str[str.index('="')+2..-2].split('?arg=') 
end 

extract '#include virtual="myfile.html"'  #=> ["myfile.html"] 
extract '#include virtual="myfile.html?arg=1"' #=> ["myfile.html", "1"]