0


0

予期しない正規表現の一致

誰でも次のテストに合格しない理由を説明できますか。 正規表現は、私が必要としないマッチを取得しています。

Tel、Fax、またはWebで始まるテキストの一致を検索したいのですが、何らかの理由で、テストのURLが一致しています。

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

3 Answer


4


正規表現の `[…​]`はhttp://www.regular-expressions.info/charclass.html[character class]を指定します。これは、括弧内に含まれるこれらの文字のいずれかと一致するように正規表現エンジンに指示します。 したがって、 `[tel | fax | web]`は「tまたはeまたはlまたは|またはfまたはaまたはxまたはwまたはeまたはbに一致」を意味します(クラスに `|`が複数回現れるという事実は無関係です) )。 文字列は、文字クラスにあるwで始まるため、パターンが一致します。

他の答えが言ったように、代わりに括弧((…​) `を使用して代替をグループ化します。


3


一緒に試してみる

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

それはうまくいくはずです。 それ以外の場合は、文字に対して一致しています、つまり Webのwは一致します。


2


あなたが使うべきです

/^(?:tel|fax|web)/i