Проверьте наличие символов до и после слова

1

Мне нужно иметь одно положительное регулярное выражение, которое объединяет все 3 из следующих:

-- ^(.*)\.abc\.(.*)$
-- ^(.*)\.abc$
-- ^abc\.(.*)$

так что нижеследующие случаи не применяются к регулярному выражению:

-- 123abc
-- .abc123
-- 123abc.

и следующий fgive положительный результат:

--.abc
--.abc.
--abc.

Я знаю, что 3 условия могут быть в ORed в группе. Я смотрю на лучший solutoin, возможно, используя lookaheads.

Я попытался использовать /^.*([\.]*)abc\1.*$/: /^.*([\.]*)abc\1.*$/ но тогда это /^.*([\.]*)abc\1.*$/ положительно для отрицательных случаев.

  • 0
    Являются ли -- частью ввода? Или просто заполнитель?
  • 0
    только заполнители
Показать ещё 6 комментариев
Теги:

1 ответ

2
Лучший ответ

Вы можете использовать это регулярное выражение:

^(.*([.;]))?abc((?=[.;])\2.*)?$

Демо-версия RegEx

RegEx Breakup:

  • ^: Начать
  • (.*([.;]))? : начните с чего-либо, за которым следует точка или точка с запятой (необязательное совпадение). Обратите внимание, что мы захватываем до abc в группе захвата # 2
  • abc: совпадение abc
  • ((?=[.;])\2.*)?. ((?=[.;])\2.*)? : Конец с тем же символом, который мы зафиксировали перед abc и любым последующим (необязательное совпадение). Утверждение Lookahead используется, чтобы убедиться, что мы не сопоставляем пустую обратную ссылку \2
  • $: Конец
  • 0
    почему вы используете группу без захвата?
  • 0
    Если вы не хотите захватить какой-то текст, лучше использовать группу без захвата для экономии памяти.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню