2016-06-14 3 views
1

Использование регулярных выраженийрегулярного выражения: последовательный отказ матча

[^a-zA-Z]([A-Z][&+-\/\\][A-Z](([&+-\/\\][A-Z])+[^a-zA-Z\d:])) 

и желая соответствовать письмам, очерченных символами, выражение достигает успешные матчи, но не в состоянии должным образом соответствовать моделям, которые сразу же следуют правильным матчам. Обратите внимание, что он нечувствителен к регистру при выполнении.

Например, в примере

пиццы аЬс C/A/R/L о R/O/F/L S

аЬс и R/O/F/L являются правильно , но C/A/R/L только частично сопоставляется (A/R/L). Как это можно зафиксировать?

Ниже представлен макет regex101: но смутно он не проявляет такого же поведения, какое я вижу в противном случае.

https://www.regex101.com/r/zV8wI0/1

+1

Попробуйте ['\ b [a-zA-Z] (?: [./] [A-Za-z]) * \ b'] (https://www.regex101.com/r/aQ0sU0/ 1). –

+0

@ WiktorStribiżew это правильный ответ (требуется немного редактирования для моих целей, но отвечает на вопрос) – Stumbler

ответ

1

Вы можете использовать

\b[a-zA-Z](?:[./][A-Za-z])*\b 

Смотрите regex demo

Если вам не нужно, чтобы соответствовать целые слова, удалить \b (границу слова).

Объяснение:

  • \b - ведущий границы слова
  • [a-zA-Z] - 1 письмо
  • (?:[./][A-Za-z])* - ноль или более последовательностей (Примечание: если вам нужно по крайней мере один . или /, replace * with a +) of:
    • [./] - точка или / символ
    • [A-Za-z] - 1 письмо
  • \b - задняя граница слова

Если вам нужно соответствовать c.a и r.l в c.a/r.l, вам нужно использовать что-то подобные

\b[a-zA-Z](?:(?:\.[A-Za-z])+|(?:/[A-Za-z])+)\b 

См. another regex demo.

Смежные вопросы