Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从正则表达式转义匹配结果_Ruby_Regex - Fatal编程技术网

Ruby 从正则表达式转义匹配结果

Ruby 从正则表达式转义匹配结果,ruby,regex,Ruby,Regex,测试将嵌入式soundcloud曲目URL更改为iframe的方法时。我在逃避结果时遇到了一个错误 有人能解释为什么在2次中断的情况下逃离+令牌+?我可以按原样使用结果,并将其附加到 下面详细介绍了这两种情况 #ruby --version # => ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.1] 案例1 需要“cgi” 类字符串 def嵌入式数据库 编译=自 compiled=soundcloud\u r

测试将嵌入式soundcloud曲目URL更改为iframe的方法时。我在逃避结果时遇到了一个错误

有人能解释为什么在2次中断的情况下逃离+令牌+?我可以按原样使用结果并将其附加到

下面详细介绍了这两种情况

#ruby --version
# => ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.1]
案例1
需要“cgi”
类字符串
def嵌入式数据库
编译=自
compiled=soundcloud\u replace(已编译)
已编译的返回
结束
私有的
def soundcloud_替换(已编译)
r=/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-\][A-Za-z0-9]+)*(?!\/集(:\/$)(?:\/[A-Za-z0-9]+(?:[-\][A-Za z0-9]+)*){1,2}//i
编译过的.gsub!(r) {|比赛|声音云|球员(比赛)}
已编译的返回
结束
def soundcloud_播放器(令牌)
#返回标记#=>+匹配的soundcloud url+在pry中
#将令牌#=>+匹配的soundcloud url+放入pry
url\u encoded\u string=CGI::转义(令牌)
#将url#u编码的#u字符串#=>+转义匹配的soundcloud url+
# ""
#=>具有非编码url的正确插值字符串
""
#=>带编码url的正确插值字符串
结束
结束
案例2
需要“cgi”
类字符串
def嵌入式数据库
编译=自
compiled=soundcloud\u replace(已编译)
已编译的返回
结束
私有的
def soundcloud_替换(已编译)
编译过的.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-\][A-Za-z0-9]+)*(?!\/集(:\/$)(?:\/[A-Za-z0-9]+(?:[-\][A-Za z0-9]+)*){1,2}\//i,soundcloud播放器(“\\1”)
已编译的返回
结束
def soundcloud_播放器(令牌)
#返回标记#=>+匹配的soundcloud url+在pry中
#将令牌#=>/1放入pry
url\u encoded\u string=CGI::转义(令牌)
#将url_encoded_string=CGI::escape(令牌)#=>%5C1放入pry
# ""
#=>具有非编码url的正确插值字符串
""
#=>带…?url=%5C1的插值字符串
结束
结束

显示问题的更简单版本:

案例1:

require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
r = /(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i
soundcloud_string.gsub!(r) { |match| soundcloud_player(match) }
puts soundcloud_string.inspect
# => Correct interpolated string with encoded url:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=https%3A%2F%2Fsoundcloud.com%2Ftheeconomist%2Fmoney-talks-april-8th-2013\"></iframe>"
require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
soundcloud_string.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i, soundcloud_player("\\1"))
puts soundcloud_string.inspect
# => Interpolated string with ...?url=%5C1:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=%5C1\"></iframe>"
需要“cgi”
def soundcloud_播放器(令牌)
url\u encoded\u string=CGI::转义(令牌)
""
结束
soundcloud_字符串=”https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
r=/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-\][A-Za-z0-9]+)*(?!\/集(:\/$)(?:\/[A-Za-z0-9]+(?:[-\][A-Za z0-9]+)*){1,2}//i
soundcloud_string.gsub!(r) {|比赛|声音云|球员(比赛)}
将soundcloud_string.inspect放入
#=>带编码url的正确插值字符串:
# ""
案例2:

require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
r = /(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i
soundcloud_string.gsub!(r) { |match| soundcloud_player(match) }
puts soundcloud_string.inspect
# => Correct interpolated string with encoded url:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=https%3A%2F%2Fsoundcloud.com%2Ftheeconomist%2Fmoney-talks-april-8th-2013\"></iframe>"
require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
soundcloud_string.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i, soundcloud_player("\\1"))
puts soundcloud_string.inspect
# => Interpolated string with ...?url=%5C1:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=%5C1\"></iframe>"
需要“cgi”
def soundcloud_播放器(令牌)
url\u encoded\u string=CGI::转义(令牌)
""
结束
soundcloud_字符串=”https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
soundcloud_string.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-\][A-Za-z0-9]+)*(?!\/集(:\/$)(?:\/[A-Za-z0-9]+(?:[-\][A-Za z0-9]+)*){1,2}\//i,soundcloud播放器(“\\1”)
将soundcloud_string.inspect放入
#=>带…?url=%5C1的插值字符串:
# ""

显示问题的更简单版本:

案例1:

require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
r = /(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i
soundcloud_string.gsub!(r) { |match| soundcloud_player(match) }
puts soundcloud_string.inspect
# => Correct interpolated string with encoded url:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=https%3A%2F%2Fsoundcloud.com%2Ftheeconomist%2Fmoney-talks-april-8th-2013\"></iframe>"
require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
soundcloud_string.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i, soundcloud_player("\\1"))
puts soundcloud_string.inspect
# => Interpolated string with ...?url=%5C1:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=%5C1\"></iframe>"
需要“cgi”
def soundcloud_播放器(令牌)
url\u encoded\u string=CGI::转义(令牌)
""
结束
soundcloud_字符串=”https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
r=/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-\][A-Za-z0-9]+)*(?!\/集(:\/$)(?:\/[A-Za-z0-9]+(?:[-\][A-Za z0-9]+)*){1,2}//i
soundcloud_string.gsub!(r) {|比赛|声音云|球员(比赛)}
将soundcloud_string.inspect放入
#=>带编码url的正确插值字符串:
# ""
案例2:

require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
r = /(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i
soundcloud_string.gsub!(r) { |match| soundcloud_player(match) }
puts soundcloud_string.inspect
# => Correct interpolated string with encoded url:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=https%3A%2F%2Fsoundcloud.com%2Ftheeconomist%2Fmoney-talks-april-8th-2013\"></iframe>"
require 'cgi'

def soundcloud_player(token)
  url_encoded_string = CGI::escape(token)
  "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=#{url_encoded_string}\"></iframe>"
end

soundcloud_string = "https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
soundcloud_string.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*(?!\/sets(?:\/|$))(?:\/[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*){1,2}\/?)/i, soundcloud_player("\\1"))
puts soundcloud_string.inspect
# => Interpolated string with ...?url=%5C1:
# "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=%5C1\"></iframe>"
需要“cgi”
def soundcloud_播放器(令牌)
url\u encoded\u string=CGI::转义(令牌)
""
结束
soundcloud_字符串=”https://soundcloud.com/theeconomist/money-talks-april-8th-2013"
soundcloud_string.gsub!(/(https?:\/\/(?:www.)?soundcloud.com\/[A-Za-z0-9]+(?:[-\][A-Za-z0-9]+)*(?!\/集(:\/$)(?:\/[A-Za-z0-9]+(?:[-\][A-Za z0-9]+)*){1,2}\//i,soundcloud播放器(“\\1”)
将soundcloud_string.inspect放入
#=>带…?url=%5C1的插值字符串:
# ""

在第二种情况下,在将“\1”转义给gsub之前。转义后,“url\u编码的\u字符串”包含“%5C1”。由于“\1”不存在,因此不会插入任何内容。相反,内容将替换为“url\u编码的\u字符串”的内容

尝试以下操作并查看案例2中的差异:

url_encoded_string = token
而不是:

url_encoded_string = CGI::escape(token)

在第二种情况下,在将“\1”转义给gsub之前。转义后,“url\u编码的\u字符串”包含“%5C1”。由于“\1”不存在,因此不会插入任何内容。相反,内容将替换为“url\u编码的\u字符串”的内容

尝试以下操作并查看案例2中的差异:

url_encoded_string = token
而不是:

url_encoded_string = CGI::escape(token)

老实说,我对Ruby的经验有限。但从我看到的情况来看,在案例2中,您正在将“\\1”传递到soundcloud\u播放器方法中。这是否意味着第一组比赛?如果是这样,那是不正确的,因为完全匹配实际上是基于0的。由于您没有捕获组,\\1什么都不是。请注意,请尝试添加“n”标志(从而使其成为/in)。如果每个捕获组中都有(?:),因此您不想捕获任何特定组,请使用“n”标志并清除所有(?:)混乱。“n”=仅显式捕获。(仅当您显式命名组时才会捕获)。这和把(?:)放在每一个捕获组中是一样的,就像这里的情况一样。啊哈,那就和我说的一模一样了。查找其他编译调用。当他们使用\\1时,他们调用的是匹配的捕获组1(只是数字或ID)。如果需要整个匹配,请尝试使用\\0。编辑:不知道Ruby,我不知道\\0是否有效,但不管您如何调用,整个匹配的结果都是您想要的\\1调用“捕获组1”,该组在给定的regex.Right中不存在。在给定的正则表达式中,没有可反向引用的组。因此\\1肯定是错误的。因为我是个红宝石,所以我不能告诉你