これにラベルを付けるのに本当に苦労しています。おそらく検索で必要なものが見つからなかったのはこのためです。
私は以下に一致するように探しています:
私が使用しているプラットフォームでは、大文字と小文字を区別しない検索を指定できません。次の正規表現を試しました。
.*[aA]uto(?:matic)[ ]*[rR]eply.*
それを考える(?:matic)
を使用すると、式がAuto
またはAutomatic
と一致します。ただし、一致するのはAutomatic
のみです。
これは正規表現エンジンにPerlを使用しています(PCRE
だと思いますが、よくわかりません)。
(?:...)
は(...)
が算術であるのと同じようにパターンを正規表現します:単に優先順位を上書きします。
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/
これはうまくいくはずです:
/.*[aA]uto(?:matic)? *[rR]eply/
あなたは単に?
後(?:matic)
[Aa]uto(?:matic ?| )[Rr]eply
これは、AutoReply
を有効なヒットにしたくないことを前提としています。
正規表現に optional( "?") がないだけです。返信後、行全体を照合する場合は、末尾に.*
を含めても問題ありませんが、質問では探しているものが特定されていません。
この正規表現を行の開始/終了アンカーで使用できます。
^[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
少し異なります。同じ結果。
m/([aA]uto(matic)? ?[rR]eply)/
に対してテスト:
Some other stuff....
Auto Reply
Automatic Reply
AutomaticReply
Now some similar stuff that shouldn't match (auto).