Ruby 匹配捕获的正则表达式

Ruby 匹配捕获的正则表达式,ruby,regex,Ruby,Regex,我有一个字符串,它可以是要包含的另一个文件,也可以是带有以下参数的文件: #include virtual="myfile.html" #include virtual="myfile.html?arg=1" 正则表达式应同时提取文件和参数,例如: m = line.match(/#include virtual=\"(?<vfile>\S+)(?<param>\?+\S+)\"/) unless line.empty? m=line.match(/#include

我有一个字符串,它可以是要包含的另一个文件,也可以是带有以下参数的文件:

#include virtual="myfile.html"
#include virtual="myfile.html?arg=1"
正则表达式应同时提取文件和参数,例如:

m = line.match(/#include virtual=\"(?<vfile>\S+)(?<param>\?+\S+)\"/) unless line.empty?
m=line.match(/#include virtual=\”(?\S+(\?++\S+)”/),除非line.empty?
除了上面的代码之外,它只适用于myfile.html?something=1的情况


我遗漏了什么?

更新您的模式,在结束锚之前包含延迟搜索和可选的最后捕获组:

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

更新您的模式,在结束锚之前包括延迟搜索和可选的最后捕获组:

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

或者,根据需要

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"]
或者,根据需要

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"]

请为您的示例显示所需的返回值。因为这似乎是一个URL,所以我将在第二步通过
URI('myfile.html?arg=1')提取整个URL并提取查询字符串。query
@Stefan有趣的想法。非常感谢。请为您的示例显示所需的返回值。因为这似乎是一个URL,所以我将在第二步通过
URI('myfile.html?arg=1')提取整个URL并提取查询字符串。query
@Stefan有趣的想法。非常感谢。