Регулярное выражение, которое соответствует слову, или ничего
Я действительно изо всех сил пытаюсь поставить ярлык на это, что, вероятно, почему я не смог найти то, что мне нужно, при поиске.
Я ищу следующее:
- Автоответ
- Автоматический ответ
- AutomaticReply
Платформа, которую я использую, не позволяет специфицировать поиск без учета регистра. Я попробовал следующее регулярное выражение:
.*[aA]uto(?:matic)[ ]*[rR]eply.*
Думая, что (?:matic)
приведет к тому, что мое выражение будет соответствовать Auto
или Automatic
. Однако это соответствует только Automatic
.
- Что я делаю неправильно?
- Какая здесь правильная терминология?
Это использует Perl для механизма регулярных выражений (я думаю, что PCRE
но я не уверен).
Ответы
Ответ 1
(?:...)
предназначен для регулярного выражения шаблонов, как (...)
для арифметики: он просто переопределяет приоритет.
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/
Ответ 2
Это должно работать:
/.*[aA]uto(?:matic)? *[rR]eply/
вам просто не хватало ?
после (?:matic)
Ответ 3
[Aa]uto(?:matic ?| )[Rr]eply
Это предполагает, что вы не хотите, чтобы AutoReply
был действительным ударом.
Вам просто не хватает необязательный ( "?" ) в регулярном выражении. Если вы хотите совместить всю строку после ответа, то в конце концов .*
в конце все в порядке, но в вашем вопросе не указано, что вы искали.
Ответ 4
Вы можете использовать это регулярное выражение с якорями начала/конца строки:
^[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
Ответ 5
Немного отличается. Тот же результат.
m/([aA]uto(matic)? ?[rR]eply)/
Протестировано:
Some other stuff....
Auto Reply
Automatic Reply
AutomaticReply
Now some similar stuff that shouldn't match (auto).