2010-02-16 5 views
11

J'essaie d'utiliser une expression régulière pour trouver toutes les sous-chaînes qui commencent par un signe égal (=) et se termine par un point-virgule (;) avec un nombre quelconque de caractères entre les deux. Cela devrait être quelque chose comme ceci =*;Expression régulière avec an = et a;

Pour une raison quelconque, l'égal ne s'enregistre pas. Y at-il une sorte de caractère d'échappement qui fera remarquer à l'expression régulière mon signe égal?

Je travaille en Java si cela a un rapport avec cette question.

Répondre

17

Cela pourrait être ce que vous recherchez. Vous devez spécifier un jeu de caractères ou un caractère générique auquel vous appliquez l'astérisque.

"=([^;]*);" 

Vous pouvez également utiliser les quantificateurs réticents:

"=(.*?);" 

En utilisant la parenthèse que vous avez maintenant des groupes. Je crois que le premier groupe correspond à la totalité du match, et group[1] est le groupe trouvé dans la parenthèse.

Le code peut ressembler à:.

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

Cela m'a fait ce que je cherchais, mais est-il possible de trouver que ce qui est entre ces délimiteurs? En d'autres termes, je veux savoir ce qu'il y a entre le = et; sans vraiment les inclure dans l'expression. Merci – chama

+1

Si vous ajoutez des parens autour de la valeur que vous souhaitez trouver, vous pouvez utiliser l'une des méthodes group() de Matcher pour récupérer uniquement le bit dans les parenthèses. – mkb

+0

Comment exactement utiliser la méthode group() pour faire cela? – chama

7

Cela ressemble à « un certain nombre de signes =, y compris 0 »

=*; 

Si vous voulez « = suivi d'un certain nombre d'autres caractères » vous voulez

=.*; 

Cependant, cette volonté correspondez avidement - si vous voulez matching paresseux (de sorte qu'il arrête un groupe quand il se trouve le prochain point-virgule) vous pouvez:

=.*?; 
1

L'expression régulière que vous avez fournie correspond à ;, ===;, ..., ================;. Que diriez-vous de =.*; (ou =.*?; s'il n'est pas gourmand)?

1

Quelque chose comme = *;