Ruby 意外正则表达式匹配

Ruby 意外正则表达式匹配,ruby,regex,Ruby,Regex,有人能解释一下为什么下面的测试没有通过吗。正则表达式正在得到一个我不想要的匹配 我想在以Tel、Fax或Web开头的文本中找到匹配项,但出于某种原因,测试中的url正在获得匹配项: def test_url_should_match assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk") end 你应该使用 /^(?:tel|fax|web)/i 试一下 assert_no_match(/^(tel|fax|web)/i,

有人能解释一下为什么下面的测试没有通过吗。正则表达式正在得到一个我不想要的匹配

我想在以Tel、Fax或Web开头的文本中找到匹配项,但出于某种原因,测试中的url正在获得匹配项:

  def test_url_should_match
    assert_no_match(/^[tel|fax|web]/i, "www.jehall.co.uk")
  end
你应该使用

/^(?:tel|fax|web)/i
试一下

assert_no_match(/^(tel|fax|web)/i, "www.jehall.co.uk")

这应该行得通。否则,您将与字符匹配,即web中的w将匹配。

[…]
在正则表达式中指定一个,它告诉正则表达式引擎匹配括号中包含的其中一个字符。因此,
[tel | fax | web]
的意思是“匹配t或e或l或|或f或a或x或w或e或b”(事实上,
在课堂上出现多次是不相关的)。由于字符串以字符类中的w开头,因此模式匹配


正如其他答案所说,您希望使用括号
(…)
来对您的备选方案进行分组。

为什么有猫王微笑
?:
在那里?@Aillyn:这样它就不会创建捕获。@Aillyn:您是说
?:
不应该在那里?实际上,
多次出现的事实是相关的,因为它会产生一个警告,如果OP真的费心阅读,它会告诉他出了什么问题:
警告:字符类重复了范围:/[^[tel | fax | web]/
@Jörg它在irb或Rubular中不会给我警告,但公平点。