2010-02-16 3 views
11

Ich versuche, einen regulären Ausdruck zu verwenden, um alle Teilzeichenfolgen zu finden, die mit einem Gleichheitszeichen (=) beginnen und mit einem Semikolon (;) mit einer beliebigen Anzahl von Zeichen dazwischen enden. Es sollte so etwas sein =*;Regulärer Ausdruck mit an = und a;

Aus irgendeinem Grund registriert das equals nicht. Gibt es eine Art Fluchtzeichen, der die Regex mein Gleichheitszeichen bemerken lässt?

Ich arbeite in Java, wenn das eine Orientierung zu dieser Frage hat.

Antwort

17

Dies könnte das sein, was Sie suchen. Sie müssen einen Zeichensatz oder Platzhalter angeben, auf den Sie das Sternchen anwenden.

"=([^;]*);" 

Sie können auch die nur ungern quantifier verwenden:

"=(.*?);" 

die Klammer Verwenden Sie jetzt Gruppen haben. Ich glaube, die erste Gruppe ist das ganze Spiel, und group[1] ist die Gruppe innerhalb der Klammer gefunden.

Der Code kann wie etwas aussehen:.

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

Das hat mir, was ich suchte, aber ist es möglich, nur um herauszufinden, was zwischen diesen Begrenzungszeichen ist? Mit anderen Worten, ich möchte bekommen, was zwischen dem = und ist; ohne sie tatsächlich in den Ausdruck aufzunehmen. Dank – chama

+1

Wenn Sie Parens um den Wert, den Sie finden möchten, hinzufügen, können Sie eine der Matcher group() -Methoden verwenden, um nur das Bit in Parens abzurufen. – mkb

+0

Wie genau würde ich die group() -Methode dazu verwenden? – chama

7

Das sieht für „eine beliebige Anzahl von Zeichen =, einschließlich 0“

=*; 

Wenn Sie „= durch eine beliebige Anzahl von anderen Zeichen folgen“ wollen Sie

=.*; 

jedoch, dass Wille gierig zusammenpassen - wenn Sie einen lazy matching (damit es eine Gruppe stoppt, wenn das nächste Semikolon gefunden wird) möchten:

=.*?; 
1

Die von Ihnen bereitgestellte Regex entspricht ;, ===;, ..., ================;. Wie wäre es mit =.*; (oder =.*?;, wenn nicht gierig benötigt wird)?

1

So etwas = *;