2012-10-14 18 views
6

Chciałbym pobrać zawartość dowolnej wartości między parami tagów <tag></tag>.Lazy (ungreedy) pasujące do wielu grup za pomocą regex

<tag> 
This is one block of text 
</tag> 

<tag> 
This is another one 
</tag> 

regex Mam wymyślić jest

/<tag>(.*)</tag>/m

Choć wydaje się, aby być chciwym i jest przechwytywanie wszystko w załączonych nawiasach aż do samego końca </tag>. Chciałbym, aby był tak leniwy, jak to możliwe, aby za każdym razem, gdy zobaczył tag zamykający, potraktuje to jako grupę dopasowania i zacznie od początku.

Jak napisać wyrażenie regularne, aby móc uzyskać wiele dopasowań w danym scenariuszu?

mam włączone próbkę tego, co opisuję w poniższym linku

http://rubular.com/r/JW5M3rnqIE

Uwaga: To nie jest XML, nie jest tak naprawdę opiera się na istniejącej standardowym formacie. Nie potrzebuję niczego wyrafinowanego, jak pełnowartościowa biblioteka z ładnym parserem.

+1

Jeszcze jedna ważna rzecz, aby wiedzieć, że za pomocą regexen na XML [grasz z Ctulthu] (http://stackoverflow.com/questions/1732348). Później nie mów, że nie zostałeś ostrzeżony. –

+0

@BorisStitnicky, nie ma tu potrzeby kultowego ładunku. Regeksy nie są rekurencyjne, to wszystko. – nalply

+2

... za każdym razem, gdy próbujesz parsować HTML za pomocą wyrażeń regularnych, bezbożne dziecko płacze krew dziewic, a rosyjscy hakerzy pwn twoją webappę ... Piosenka regegularnej analizy wyników exps wytłumaczy głosy mor Jestem człowiekiem z SP tutaj, widzę, że widzisz ͎̩͔͚̖͔̙̋ ̩ ̩ ͎̩͔̋ beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful beautiful ALL ALL ALL ALL ALL ALL ALL ALL ALL I S LOST –

Odpowiedz

11

Go z regex wzoru:

/<tag>(.*?)<\/tag>/im 

Lazy (non-chciwy) jest .*? nie .*.

Aby znaleźć wiele wystąpień, przeznaczenie:

string.scan(/<tag>(.*?)<\/tag>/im) 
+0

Zobacz także http: // www. regular-expressions.info/ruby.html –

+0

Dzięki! Nie myślałem o wypróbowywaniu rzeczy, które miał rubin dla regex – MxyL

+0

@Keikoku - Nie ma za co. Powodzenia! –

Powiązane problemy