mam zdanie jak tenRegexp leniwy kwantyfikator
a something* q b c w
i muszę dopasować się i q razem jak
(id_1: a, id_2: q)
b sam jak
(id_1: b)
i C i w razem jak (ID_1: C ID_2: w).
że próbuje użyć tego wyrażenia regularnego
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)?\b)
powodu lazy operatora *? regexp tylko pierwszą część zdania, pasujące tylko
(id_1: a, id_1: b, id_1: c)
Jeśli używamy chciwy operatora tak, że ekspresja staje
(?:\b(?P<id_1>a|b|c)\b(?:.*)(?P<id_2>q|w)?\b)
It mecze
(id_1: a)
wszystko po dopasowaniu jako . *.
Jeśli druga część jest obowiązkowe (z leniwa na *.):
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)\b)
pasuje zdań jak
(id_1: a, id_2: q);(id_1: b, id_2: w)
jak oczekiwano.
Możliwe jest użycie wyrażeń regularnych, które "preferują" pasujących do całego zdania (w tym części opcjonalnej) lub które pasują tylko do pierwszej części TYLKO, jeśli brakuje opcjonalnej.
EDYCJA: Przepraszamy, że podane wyrażenia miały pewne błędy.
Ostatni regex jest:
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)\b)
i wymaga zarówno grupę być obowiązkowe. Dopasowuje "coś * w", ale nie pasuje do "czegoś" * lub po prostu "a".Muszę dopasować "do czegoś * W" jak "a" i "AW" i dostać grupę pasujący odpowiednio:
(id_1: a , id_2: w) ; (id_1: a, id_2: none) ; (id_1:a , id_2: w)
myślę, że regex wymagane jest:
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)?\b)
ale w zdaniu "coś * w" pasuje tylko do "a" (z powodu leniwego operatora na. *).
Zaktualizowałem również wszystkie przykłady na żywo.
nie Twoja ostatnia pasujące regex struny jest droga trzeba? Usunąłem 'b cw' i istnieje dopasowanie. Czy mógłbyś użyć 1 przykładu, aby opisać, co musisz w nim dopasować, a które regex jest najbliższe, czego brakuje? –
Witaj @stribizhev, dzięki za pomoc. Edytowałem pytanie, ponieważ wystąpiły pewne błędy w wyrażeniach. Podałem również przykład w dziale EDIT. – Desh901
Podobnie jak ['\ b (? P a | b | c) \ b (?: (?! \ B (?: Q | w) \ b).) * (? P q | w |) \ b '] (https://regex101.com/r/vU4wZ0/4)? A może, ['\ b (? P a | b | c) \ b (?: (?! \ B (?: Q | w) \ b).) * (? P q | w)? \ b'] (https://regex101.com/r/iP2pZ5/1)? –