n'abend,
Meine Strategie war nun, prüfe die Zeile auf den vollständigen Inhalt, wenn dies fehlschlägt, prüfe, ob der optionale Wert nicht dabei ist.
Du machst dadurch also pro Zeile 2 RegExp-Vergleiche, wo einer eigentlich ausreichen sollte?
»(\S+).+?(\S+).+?« sollte man auch mit »((\S+).+?){2}« angeben können. Dementsprechend für die Zahlen »{(-{0,1}\d+\.\d+).+?){3,4}«, wobei das Konstrukt 3, maximal 4 Mal auftauchen darf.
»((\S+).+?){2}{(-{0,1}\d+\.\d+).+?){3,4}« ist also eine Repräsentation deines RegExp, der zum Ersten beide Fälle betrachtet und zum Zweiten kürzer und verständlicher ist. Wenn du weisst was an den stellen ».+?« konkret auftauchen darf, kannst du das auch im RegExp angeben, dürfte sich nur positiv auf die Abarbeitungszeit auswirken.
Der Absatz Groups and capturing von JavaDoc - Regular Expressions erklärt, dass es möglich ist Gruppen zu quantifizieren (der Kern des oben resultierenden RegExp).
Vielleicht macht es auch Sinn den RegExp nur einmal kompilieren zu lassen und mit dem Matcher zu arbeiten, statt String.matches( "someRegExp" ) zu benutzen. Letzteres würde den RegExp schliesslich neu kompilieren müssen und ist vermutlich nichts weiter als ein Wrapper für
Pattern p = Pattern.compile( "derRegExp" );
Matcher m = p.matcher( "deineZuMatchendeEingabe" );
return m.matches();
Ich habe mit RegExp in Java bisher nicht viel am Hut gehabt. Auch habe ich die gelieferten RegExps nicht getestet. Das ist also lediglich als Denkanstoß anzusehen.
weiterhin schönen abend...
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|