2017-08-11 101 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"]