2010-07-26 20 views
12

Próbuję napisać wyrażenie regularne, które wybiera wszystko między dwoma znakami.RegEx, aby wybrać wszystko pomiędzy dwoma znakami?

Na przykład, gdy regex napotka '§' chcę aby zaznaczyć wszystko po znaku '§', aż do tego stopnia, że ​​regex napotka ';'. Próbowałem spojrzeć z tyłu i patrzeć w przeszłość, ale tak naprawdę nie robią tego.

Na przykład " § 1-2 bla; " powinien zwrócić " 1-2 bla".

Każda pomoc będzie bardzo ceniona!

+2

Proszę podać technologię, w której działają, jak regex ma wiele „smaków” z nieco innymi składni i możliwości. – Jay

+0

Chwila, tęskniłem za pierwszym razem ... "Próbowałem patrzeć z tyłu i patrzeć w przeszłość, ale oni tak naprawdę nie robią tego." -- Dlaczego nie? co poszło nie tak? Czy to JavaScript? –

+0

Ponieważ jestem nowy w RegEx i naprawdę nie mogłem tego rozgryźć. To jest RegEx w Actionscript 3, i od czasu do czasu robi dziwne rzeczy :) dziękuję za odpowiedzi wszystkim, mam pewne rzeczy działające! – Jaaq

Odpowiedz

3

Dla prostego przypadku powinien to zrobić:

§(.*); 

To może wymagać modyfikacji, jeśli nie chcesz, aby gniazdowania:

§(.*?); 
+2

To nie jest całkiem poprawne - '. *' Jest chciwe, więc wyrażenie będzie pasowało do * ostatniego * ';' napotkanego, a nie pierwszego. –

+0

@Peter: może to nie być problem dla OP i może być tym, czego OP chce. – SilentGhost

+1

Dobrze oparte na "aż do momentu, w którym regex napotka"; "- uważam, że to znaczy * nie powinno być chciwe. –

18

użyć tego wyrażenia regularnego

(?<=§).*?(?=;) 
+0

:) Dobra sugestia. dzięki. – Gopi

+0

Działa lepiej niż akceptowane rozwiązanie – Riccardo

+0

Nie kompatybilny z JavaScript – TetraDev

29

Co powiedzieli na:

"§([^;]*);" 

Wybrane znaki między § i ; są dostępne jako grupy meczu 1.

+1

To działało dla mnie. Ale z ciekawości zadziałało również bez kończącego się średnika. Dlaczego jest to konieczne? – uesports135

+0

Tak, końcowy średnik nie jest wymagany. Działa również bez tego. – MixCoded

+0

Działa dobrze z JS – TetraDev

Powiązane problemy