Muszę wyodrębnić z łańcucha zestaw znaków, które są zawarte między dwoma ogranicznikami, bez zwracania samych ograniczników.
Prosty przykład powinien być pomocny:
Cel : wyodrębnij podciąg między nawiasami kwadratowymi, bez zwracania samych nawiasów.
Ciąg podstawowy :This is a test string [more or less]
Jeśli użyję następującego reg. dawny.
\ [. *? \]
Mecz jest [more or less]
. Muszę tylko dostać more or less
(bez nawiasów).
Czy można to zrobić?
Odpowiedzi:
Łatwo zrobione:
Technicznie używa to lookaheads i lookbehinds. Patrz : Twierdzenia Lookahead i Lookbehind o zerowej szerokości . Wzór składa się z:
Alternatywnie możesz po prostu uchwycić to, co jest w nawiasach kwadratowych:
i zwróć pierwszą przechwyconą grupę zamiast całego meczu.
źródło
This is a test string [more [or] less]
czy ten zwrot miałby powrócićmore [or] less
?Jeśli używasz JavaScript , pierwszego rozwiązania dostarczonego przez cletus,
(?<=\[)(.*?)(?=\])
nie będzie działać, ponieważ JavaScript nie obsługuje operatora lookbehind.Jednak drugie rozwiązanie działa dobrze, ale musisz uzyskać drugi dopasowany element.
Przykład:
Zwróci:
Zatem potrzebna jest druga wartość. Posługiwać się:
Wracać:
źródło
Musisz tylko „uchwycić” bit między nawiasami.
Aby to zrobić, umieść go w nawiasach. Nie mówisz, jakiego języka używa. Na przykład w Perlu można uzyskać do niego dostęp za pomocą zmiennej $ 1.
Inne języki będą miały różne mechanizmy. Na przykład C # wykorzystuje klasę kolekcji Match , jak sądzę.
źródło
[^\[]
Dopasuj dowolny znak, który nie jest [.+
Dopasuj 1 lub więcej elementów, które nie są[
. Tworzy grupy tych dopasowań.(?=\])
Pozytywne spojrzenie w przyszłość]
. Dopasowuje grupę kończącą się]
bez uwzględnienia jej w wyniku.Gotowy.
Dowód.
http://regexr.com/3gobr
Podobne do rozwiązania zaproponowanego przez null. Ale dodatkowe
\]
nie jest wymagane. Jako dodatkową uwagę, wydaje się, że\
nie jest wymagane ucieczka[
po^
. Dla czytelności pozostawiłbym to.Nie działa w sytuacji, w której ograniczniki są identyczne.
"more or less"
na przykład.źródło
PHP:
źródło
Aby usunąć również [] użyj:
źródło
Miałem ten sam problem przy użyciu wyrażenia regularnego z skryptami bash. Użyłem 2-etapowego rozwiązania przy użyciu rur z aplikacją grep -o
więc najpierw
Oczywiście przy innych odpowiedziach nie jest tak skuteczny, ale alternatywa.
źródło
Ten konkretnie działa dla parsera wyrażeń regularnych javascript
/[^[\]]+(?=])/g
po prostu uruchom to w konsoli
źródło
Chciałem znaleźć ciąg między / i #, ale # jest czasami opcjonalny. Oto regex, którego używam:
źródło
Oto jak udało mi się bez „[” i „]” w C #:
Dane wyjściowe to:
źródło
Jeśli potrzebujesz wyodrębnić tekst bez nawiasów, możesz użyć bash awk
echo " [hola mundo] " | awk -F'[][]' '{print $2}'
wynik:
hola mundo
źródło