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.
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.
Odpowiedzi:
Możesz użyć :
.*(REQ_[^|]*)\|
„|” postać będzie wykluczona.
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.
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:
.*(REQ_[\w]+)[\s]*\|
[\w]+
pasuje do wszystkich znaków słownych (liter, cyfr i „_”) |
nie są uwzględniane w przechwyconym wyniku ( [\s]*
jest poza nawiasami) .*(REQ_[^|]+)\|
.*(REQ_.+?)\|
Jeśli REQ_
zawsze następuje po nim znak słowny, możesz po prostu użyć REQ_w+
lub jeśli nie chcesz się dopasować ABCREQ_123
, użyć granica słowa : \bREQ_\w+
.