Java Regex: строка соответствия содержит любой из двух текстов среди многих

1

Хотите совместить строку, содержащую

(text1 or text2) and ( text3 or text4) and (text5) and (any of two among text6,text7,text8 and text9)


До сих пор я пытался

^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5).*$


который соответствует строке, содержит (text1 или text2) и (text3 или text4) и (text5)

Как написать один образец, который удовлетворяет мою потребность.

** PS: ** Я не хочу делить последнюю часть (любой из двух среди text6, text7, text8 и text9) и писать регулярное выражение, как

(^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5)(?=.*text6)(?=.*text7).*$)|(^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5)(?=.*text6)(?=.*text8).*$)|(^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5)(?=.*text6)(?=.*text9).*$)|(^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5)(?=.*text7)(?=.*text8).*$)|(^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5)(?=.*text7)(?=.*text9).\*$)|(^(?=.*(text1|text2))(?=.*(text3|text4))(?=.*text5)(?=.*text8)(?=.*text9).*$)


Поскольку я не знаю, сколько текстов у меня будет в моей последней части.

Любые предложения будут высоко оценены.

Теги:

1 ответ

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

Просто измените свое регулярное выражение, как показано ниже.

^(?=.*(text[12]))(?=.*(text[34]))(?=.*text5)(?=.*(text[6789]))(?=.*(?:(?!\3)text[6789])).*$

Java regex будет,

"^(?=.*(text[12]))(?=.*(text[34]))(?=.*text5)(?=.*(text[6789]))(?=.*(?:(?!\\3)text[6789])).*$"

DEMO

(?=.*(text[6789]))(?=.*(?:(?!\3)text[6789])) Утверждается, что должен быть два text[6789] или text[6789] но текстовые строки не должны повторяться.

  • 0
    но text1, text2 ... это только примеры. У меня может быть любая строка в этом месте.
  • 0
    затем измените приведенное выше регулярное выражение в соответствии с вашими потребностями, используя | оператор.
Показать ещё 11 комментариев

Ещё вопросы

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