неожиданное совпадение с регулярным выражением - PullRequest
0 голосов
/ 23 августа 2010

Может кто-нибудь объяснить, почему следующий тест не проходит.Регулярное выражение получает совпадение там, где я его не хочу.

Я хочу найти совпадение в тексте, который начинается с Tel, Fax или Web, но по какой-то причине URL в тесте получает совпадение

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

Ответы [ 3 ]

4 голосов
/ 23 августа 2010

[...] в регулярном выражении указывает класс символов , который указывает обработчику регулярных выражений совпадать с одним из этих символов, заключенных в скобки.Следовательно, [tel|fax|web] означает «соответствует t или e, или l, или |, или f, или a, или x, или w, или e, или b» (тот факт, что | появляется более одного раза в классе, не имеет значения).Поскольку строка начинается с символа aw, который находится в классе символов, шаблон соответствует.

Как уже говорилось в других ответах, вы хотите использовать скобки (...) для группировки чередования.

3 голосов
/ 23 августа 2010

Попробуйте с

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

Это должно работать. В противном случае вы будете сопоставлять символы, т. Е. W в сети будет совпадать.

2 голосов
/ 23 августа 2010

Вы должны использовать

/^(?:tel|fax|web)/i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...