web-dev-qa-db-ja.com

単語に一致する、または何にも一致しない正規表現

これにラベルを付けるのに本当に苦労しています。おそらく検索で必要なものが見つからなかったのはこのためです。

私は以下に一致するように探しています:

  • 自動返信
  • 自動返信
  • 自動返信

私が使用しているプラ​​ットフォームでは、大文字と小文字を区別しない検索を指定できません。次の正規表現を試しました。

.*[aA]uto(?:matic)[ ]*[rR]eply.*

それを考える(?:matic)を使用すると、式がAutoまたはAutomaticと一致します。ただし、一致するのはAutomaticのみです。

  • 何が悪いのですか?
  • ここで適切な用語は何ですか?

これは正規表現エンジンにPerlを使用しています(PCREだと思いますが、よくわかりません)。

14
crush

(?:...)(...)が算術であるのと同じようにパターンを正規表現します:単に優先順位を上書きします。

 ab|cd        # Matches ab or cd
 a(?:b|c)d    # Matches abd or acd

?数量詞は、マッチングをオプションにするものです。

 a?           # Matches a or an empty string
 abc?d        # Matches abcd or abd
 a(?:bc)?d    # Matches abcd or ad

あなたが欲しい

(?:matic)?

不要な先頭と末尾の.*がないと、次のようになります。

/[aA]uto(?:matic)?[ ]*[rR]eply/

@ adamdc78が指摘するように、これはAutoReplyに一致します。これは、以下を使用することで回避できます。

/[aA]uto(?:matic[ ]*|[ ]+)[rR]eply/

または

/[aA]uto(?:matic|[ ])[ ]*[rR]eply/
28
ikegami

これはうまくいくはずです:

/.*[aA]uto(?:matic)? *[rR]eply/

あなたは単に?(?:matic)

4
Hunter McMillen
[Aa]uto(?:matic ?| )[Rr]eply

これは、AutoReplyを有効なヒットにしたくないことを前提としています。

正規表現に optional( "?") がないだけです。返信後、行全体を照合する場合は、末尾に.*を含めても問題ありませんが、質問では探しているものが特定されていません。

4
adamdc78

この正規表現を行の開始/終了アンカーで使用できます。

^[aA]uto(?:matic)? *[rR]eply$

説明:

^ assert position at start of the string
[aA] match a single character present in the list below
aA a single character in the list aA literally (case sensitive)
uto matches the characters uto literally (case sensitive)
(?:matic)? Non-capturing group
Quantifier: Between zero and one time, as many times as possible, giving back as needed 
[greedy]
matic matches the characters matic literally (case sensitive)
 * matches the character   literally
Quantifier: Between zero and unlimited times, as many times as possible, giving back 
as needed [greedy]
[rR] match a single character present in the list below
rR a single character in the list rR literally (case sensitive)
eply matches the characters eply literally (case sensitive)
$ assert position at end of the string
2
anubhava

少し異なります。同じ結果。

m/([aA]uto(matic)? ?[rR]eply)/

に対してテスト:

Some other stuff....
    Auto Reply
    Automatic Reply
    AutomaticReply

Now some similar stuff that shouldn't match (auto).
1
user3183018