Regex dopasowuje wszystkie kombinacje


1

Mam następujący tekst poniżej. Jak napisać wyrażenie regularne, aby przechwycić cały tekst powiązany REQ_XXX?

To jest moje wyrażenie .*(REQ_.*)\|, ale przechwytuje |3 |4 |5. Chcę tylko, żeby zatrzymało się po pierwszym | widzi.

enter image description here


Myślę, że powinieneś usunąć i opublikować w Stackoverflow.
johnny

3
Jeśli możemy odpowiedzieć na to pytanie, powinno być dobrze. RegEx jest prawdopodobnie szarym obszarem między kodowaniem a pracą aplikacji.
music2myear

Odpowiedzi:


2

Możesz użyć :

.*(REQ_[^|]*)\|

„|” postać będzie wykluczona.


Zastanów się nad dodaniem referencji wspierających to, co sam określasz.
Pimp Juice IT

2

Edytować:

.*(REQ_.*?)\|

Sztuką jest ? mówi wcześniej .* zatrzymać się jak najwcześniej. W ten sposób pierwszy | który kończy zakres .*. To jest dokładnie to, czego chcesz.

Moja stara odpowiedź jest poniżej. To działa dobrze, ale myślę, że powyższe jest właściwą drogą.


Stara odpowiedź:

.* dopasowuje (prawie) wszystko, w tym |. Posługiwać się [^|\n]* dopasować wszystko, ale | i nowa linia.

.*(REQ_[^|]*)\|

\n jest potrzebny, ponieważ czysty [^|]* może rozciągać się na wiele linii. Chyba tego nie chcesz.


1

Niektóre rozwiązania są już opublikowane w innych odpowiedziach, podam tutaj podsumowanie.

Możesz śledzić wiele podejść tutaj, musisz zdecydować na podstawie swoich potrzeb, z których korzystasz:

  1. podaj pozytywną listę znaków pojawiających się w kodzie:
    .*(REQ_[\w]+)[\s]*\|
    • w tym przypadku [\w]+ pasuje do wszystkich znaków słownych (liter, cyfr i „_”)
    • białe znaki wcześniej | nie są uwzględniane w przechwyconym wyniku ( [\s]* jest poza nawiasami)
  2. podaj negatywną listę znaków, w której chcesz, aby zatrzymało się wyrażenie regularne:
    .*(REQ_[^|]+)\|
  3. użyj leniwego meczu, aby zatrzymać się przy pierwszej możliwości: .*(REQ_.+?)\|

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.