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. regex user3719021 źródło 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. Alix źródło 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. Kamil Maciorowski źródło 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: 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) podaj negatywną listę znaków, w której chcesz, aby zatrzymało się wyrażenie regularne: .*(REQ_[^|]+)\| użyj leniwego meczu, aby zatrzymać się przy pierwszej możliwości: .*(REQ_.+?)\| Máté Juhász źródło 0 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+. Zobacz w akcji Toto źródło
2 Możesz użyć : .*(REQ_[^|]*)\| „|” postać będzie wykluczona. Alix źródło 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. Kamil Maciorowski źródło 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: 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) podaj negatywną listę znaków, w której chcesz, aby zatrzymało się wyrażenie regularne: .*(REQ_[^|]+)\| użyj leniwego meczu, aby zatrzymać się przy pierwszej możliwości: .*(REQ_.+?)\| Máté Juhász źródło 0 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+. Zobacz w akcji Toto źródło
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. Kamil Maciorowski źródło
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: 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) podaj negatywną listę znaków, w której chcesz, aby zatrzymało się wyrażenie regularne: .*(REQ_[^|]+)\| użyj leniwego meczu, aby zatrzymać się przy pierwszej możliwości: .*(REQ_.+?)\| Máté Juhász źródło
0 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+. Zobacz w akcji Toto źródło
Odpowiedzi:
Możesz użyć :
„|” postać będzie wykluczona.
źródło
Edytować:
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.\n
jest potrzebny, ponieważ czysty[^|]*
może rozciągać się na wiele linii. Chyba tego nie chcesz.źródło
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_.+?)\|
źródło
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+
.Zobacz w akcji
źródło