通过引号与模式匹配双引号

时间:2019-06-26 20:38:35

标签: ruby string-matching

为什么NodeComment找不到双引号?

check_char1

...可以使用#!/usr/bin/env ruby line = 'hello, "bob"' def check_char1(line, _char) puts "check_char1 found #{_char} in #{line}" if line =~ /_char/ end check_char1(line, '"') def check_char2(line, _char) puts "check_char2 found #{_char.inspect} in #{line}" if line =~ _char end check_char2(line, /"/) 使它起作用吗? (如何将双引号传递给该方法?)

2 个答案:

答案 0 :(得分:3)

如果_char仅是一个字符串(即不需要正则表达式模式匹配),则只需使用String#include?

if line.include?(_char)

如果您必须为此使用正则表达式,那么Regexp.escape是您的朋友:

if line =~ /#{Regexp.escape(_char)}/
if line =~ Regexp.new(Regexp.escape(_char))

,如果您希望将_char当作正则表达式来对待(即'.'匹配任何内容),请放下Regexp.escape

if line =~ /#{_char}/
if line =~ Regexp.new(_char)

答案 1 :(得分:2)

check_char1中,_char中的/_char/被视为文字,而不是变量。您需要/#{_char}/

如果将_char视为变量,那么如何在正则表达式中输入作为变量,方法或常量名称的文字呢?