String.split()

Hi Hardie,

sorry, obige Methode war nicht richtig. Hab sie verbessert.
Die Methode benutzt einen Regulären Ausdruck.

Wenn Du das direkt im Programm machen möchtest, kannst Du das so schreiben:

Java:
Pattern pattern = Pattern.compile("Sub.*?End Sub", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher matcher = pattern.matcher(in);
while (matcher.find()) {
  	 System.out.println(matcher.group(0));   // Gruppe 0 ist immer der gesammte Match
}

Gruß
joschi
 
Hey, super. So funktioniert es wie gewünscht. Jedoch hab ich nun noch eine Verständnisfrage, damit ich das auch korrekt verstehe:

Sub = Startteil
.* = x-beliebige Anzahl von irgendeinem Zeichen
? = ? (eigentlich Kann-Zeichen)
End Sub = Schlussteil

Warum funktioniert es nur, wenn das ? nach dem .* steht?

LG
 
Hi Hardie,

das "?" besagt, das es ein Non Greedy (nicht gefrässig) Match ist.
Wenn kein "?" da ist wird der größtmögliche Match genommen.

Ums mal an Deinem Beispiel zu verdeutlichen.
Wenn Dein String so aussieht:

Sub xxxx End Sub Sub yyyyy End Sub

Dann matched

Sub.*End Sub auf den gesammt Ausdruck. Sub.*?End Sub aber nur auf "Sub xxxx End Sub".

Irgendwie nicht einfach zu erklären, ich hoffe es war einigermassen verständlich.

Gruß
joschi
 
Hm, so in etwa hab ich es verstanden. Ist aber wirklich etwas verwirrend. Ich danke dir auf jedenfall für deine Hilfe. Hat mich sehr weitergbracht.

Gruß Hardie
 
Hallo zusammen,

auch sehr nett in diesem Zusammenhang ist das kleine Tool The RegEx Coach, das mir ein Arbeitskollege mal vor einiger Zeit empfohlen hat!!

Es kann unter http://weitz.de/files/regex-coach.exe (Windows installer) oder http://weitz.de/files/regex-coach.tgz (Linux tar archive) runtergeladen werden!

Es enthält neben guten Erklärungen auch eine Oberfläche, mit der reguläre Ausdrücke getestet und ausprobiert werden können !!

Gruß
Klaus
 
Zurück