2013-07-08 22 views
22

Se ho il seguente schema in qualche testo:estratto sottostringa utilizzando espressioni regolari in Groovy

def articleContent = "<![CDATA[ Hellow World ]]>" 

Vorrei estrarre la parte "Hellow World", in modo da utilizzare il seguente codice di abbinarlo:

def contentRegex = "<![CDATA[ /(.)*/ ]]>" 
def contentMatcher = (articleContent =~ contentRegex) 
println contentMatcher[0] 

Tuttavia continuo a ricevere un'eccezione di puntatore nullo perché la regex non sembra funzionare, quale sarebbe l'espressione regolare corretta per "qualsiasi tranquillità del testo" e come raccoglierla da una stringa?

risposta

30

Prova:

def result = (articleContent =~ /<!\[CDATA\[(.+)]]>/)[ 0 ]​[ 1 ] 

Tuttavia mi preoccupa che si prevede di analizzare xml con le espressioni regolari. Se questo cdata fa parte di un documento xml valido più ampio, meglio usare un parser xml

+0

THanks che ha funzionato perfettamente: D – RicardoE

+1

Non è valido xml ... questo è il problema. Grazie mille! – RicardoE

+2

Sono nuovo di Groovy. Puoi spiegare perché abbiamo bisogno di dereferenziare il matcher con '[0]' per ottenere un elenco di gruppi? – Gili