Хотите совместить строку, содержащую
(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).*$)
Поскольку я не знаю, сколько текстов у меня будет в моей последней части.
Любые предложения будут высоко оценены.
Просто измените свое регулярное выражение, как показано ниже.
^(?=.*(text[12]))(?=.*(text[34]))(?=.*text5)(?=.*(text[6789]))(?=.*(?:(?!\3)text[6789])).*$
Java regex будет,
"^(?=.*(text[12]))(?=.*(text[34]))(?=.*text5)(?=.*(text[6789]))(?=.*(?:(?!\\3)text[6789])).*$"
(?=.*(text[6789]))(?=.*(?:(?!\3)text[6789]))
Утверждается, что должен быть два text[6789]
или text[6789]
но текстовые строки не должны повторяться.
|
оператор.