意外的正则表达式匹配

时间:2010-08-23 15:17:28

标签: ruby regex

任何人都可以解释为什么以下测试没有通过。正则表达式正在得到一个我不想要的匹配。

我希望找到以电话,传真或网络开头的文字匹配但由于某种原因,测试中的网址正在匹配:

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

3 个答案:

答案 0 :(得分:4)

正则表达式中的

[...]指定character class,它告诉正则表达式引擎匹配括号中包含的其中一个字符。因此,[tel|fax|web]表示“匹配t或e或l或|或f或a或x或w或e或b”(|在类中出现不止一次这一事实无关紧要)。由于字符串以字符类中的w开头,因此模式匹配。

正如其他答案所说,您希望使用括号(...)来对您的轮换进行分组。

答案 1 :(得分:3)

尝试

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

那应该有用。否则,您将匹配字符,即网络中的w将匹配。

答案 2 :(得分:2)

你应该使用

/^(?:tel|fax|web)/i
相关问题