#regex #alternation
Вопрос:
Регулярное выражение для сопоставления одной из двух строк в третьем сегменте, т. е. в псевдо-коде:
/content/au/(boomer or millenial)/...
Примеры совпадений
/content/au/boomer
/content/au/boomer/male/31
/content/au/millenial/female/29/M
/content/au/millenial/male/18/UM
Примеры несоответствий
/content/au
/content/nz/millenial/male/18/UM
/content/au/genz/male
Я пробовал это, но безрезультатно:
^/content/au/(?![^/]*/(?:millenial|boomer))([^/]*)
Ответ №1:
Не смотрите вперед; просто используйте простое чередование millenial|boomer
, а затем границу слов:
^/content/au/(?:millenial|boomer)b(?:/.*)?
Смотрите живую демонстрацию.
Вам, вероятно, тоже следует правильно писать millennial (два «n», а не одно).
Комментарии:
1. Значение
b
не совсем строгое; оно все равно будет совпадать сmillenial.com
илиboomer*x
.2. @tripleee, конечно , вы могли бы поменять
b
(?=/|$)
местами, ноb
это работает для всех случаев ОП, и также нужно учитывать читаемость.
Ответ №2:
Что с отрицательной внешностью? Это простое, если не тривиальное, положительное совпадение.
^/content/au/(?:millenial|boomer)(?:/|$)
Последняя группа говорит, что за совпадением должна следовать косая черта или ничего, чтобы исключить пути, которые начинаются с одной из альтернатив, но содержат дополнительный текст.