2010-02-16 11 views
11

Sto cercando di utilizzare un'espressione regolare per trovare tutte le sottostringhe che iniziano con un segno di uguale (=) e termina con un punto e virgola (;) con qualsiasi numero di caratteri in mezzo. Dovrebbe essere qualcosa di simile =*;Espressione regolare con an = e a;

Per qualche motivo, gli uguali non si registrano. Esiste una specie di personaggio di fuga che farà sì che la regex noti il ​​mio segno di uguaglianza?

Sto lavorando in Java se questo ha qualche riferimento a questa domanda.

risposta

17

Questo potrebbe essere quello che stai cercando. È necessario specificare un set di caratteri o caratteri jolly per il quale si sta applicando l'asterisco.

"=([^;]*);" 

È anche possibile utilizzare il quantificatore riluttante:

"=(.*?);" 

Utilizzando la parentesi ora avete i gruppi. Credo che il primo gruppo sia l'intero match, e group[1] è il gruppo trovato tra parentesi.

Il codice potrebbe essere simile a:.

Regex r = new Regex("=([^;]*);"); 
Match m = r.Match(yourData); 
while (m.Success) { 
    string match = m.Groups[1]; 
    // match should be the text between the '=' and the ';'. 
} 
+0

Questo mi ha fatto quello che stavo cercando, ma è possibile trovare solo ciò che è tra questi delimitatori? In altre parole, voglio ottenere ciò che c'è tra il = e; senza effettivamente includerli nell'espressione. Grazie – chama

+1

Se si aggiunge il paren- sore attorno al valore che si desidera trovare, è possibile utilizzare uno dei metodi di gruppo() di Matcher per recuperare solo il bit in Paren. – mkb

+0

Come esattamente userò il metodo group() per fare questo? – chama

7

Questo sembra per "qualsiasi numero di = segni, tra cui 0"

=*; 

Se si vuole "= seguito da un numero qualsiasi di altri personaggi" che si desidera

=.*; 

tuttavia, che la volontà abbinare avidamente - se si vuole corrispondenza pigro (in modo che si ferma un gruppo quando trova il successivo punto e virgola) si potrebbe desiderare:

=.*?; 
1

La regex che hai fornito corrisponderebbe a ;, ===;, ..., ================;. Che ne dite di =.*; (o =.*?; se non è avaro)?

1

Qualcosa di simile a = *;

Problemi correlati