Sammlung regulärer Ausdrücke

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hallo zusammen,

da sich unser Azubi gerade ein bisschen mit regulären Ausdrücken auseinander setzt, bin ich auf die Idee gekommen, dass man ja eine Liste/Klasse mit nützlichen regulären Ausdrücken anlegen könnte. Einfach Dinge, die man öffters mal brauchen könnte. Z. B. die Überprüfung auf eine valide E-Mail, eine Web-Adresse oder IP ... Ich hab für den Anfang mal schnell eine Überprüfung für IPV4 Adressen geschrieben:

Code:
public class BasicRegEx {

   public static final String NUMBER_BETWEEN_0_AND_255 = "(([0-9]{1,2})|([01][0-9]{2})|(2((5[0-5])|([0-4][0-9]))))"; // Überprüft, ob es sich um eine Zahl zwischen 0 und 255 handelt
   public static final String VALID_IPV4 = "(" + NUMBER_BETWEEN_0_AND_255 + "\\.){3}" + NUMBER_BETWEEN_0_AND_255; // Prüft eine IPv4 Adresse auf Gültigkeit
   public static final String IS_ONE_WORD_IN_LIST = "\\b(?:word1|word2|word3)\\b"; // Überprüft ob min. eines der Wörter vorkommt
   public static final String START_CASE_INSENSETIVE = "(?i)"; // Beginnt ein Regex so, wird er case insensitive

   public static void test_is_one_word_in_list() {
      String str = "This is word1 and here you have word2";
      Pattern regex = Pattern.compile(IS_ONE_WORD_IN_LIST);
      Matcher matcher = regex.matcher(str);
      System.out.println(matcher.find());
   }
}

Wenn jemand etwas dazu beitragen möchte, einfach den entsprechenden Ausdruck posten, und ich übernehme ihn dann in diesen 1. Post. Natürlich sind auch Verbesserungsvorschläge gern gesehen :) .

lg
 
S

SlaterB

Gast
Wiederholung ist immer schlecht, schreibe
String a = [0-9]{1,2})|(1[0- usw.
String b = (a .){3}a

du erlaubst übrigens 07, aber nicht 007? ;)
 

The_S

Top Contributor
Hm, OK. Da ist was dran. Ist eigentlich mein erster regulärer Ausdruck ;) . Das mit dem 007 besser ich gleich mal aus, aber deinen Tipp, dass Wiederholungen schlecht sind, hab ich jetzt net so ganz verstanden, wie ich das ändern soll :oops:
 
S

SlaterB

Gast
steht doch da, du hast den String '(([0-9]{1,2})|([01][0-9]{2})|(2((5[0-5])|([0-4][0-9])))' zweimal im Ausdruck,
schreibe den in eine Variable a und baue den Gesamtausdruck aus mehreren a zusammen
 

The_S

Top Contributor
ja ok, aber warum ist das für die Performance gut? Letztendlich wird doch ohnehin am Ende der komplette Ausdruck ausgeführt. Dabei ist es doch egal, ob der jetzt zusammen gesetzt ist oder nicht ???:L
 
S

SlaterB

Gast
wer spricht von Performance? ;)
ne, geht nur allgemein um Lesbarkeit/ Änderbarkeit/ Fehlersuche usw.
wenn du jetzt von 07 auf 007 umstellen willst musst du das nur einmal machen,
jeder der (wie ich) den Ausdruck noch nicht kennt und liest, muss nicht 2 Min. schauen, ob beim rechten Klammerwirrwarr irgendeine klitzkleine Bedingung anders ist
 

The_S

Top Contributor
Achso, sags doch gleich ;) . Joa, könnte ich machen. Willste auch noch was zu den regulären Ausdrücken aus deinem unendlichen Wissensschatz hinzufügen ;) ? Sieht momentan noch so leer aus :p
 

André Uhres

Top Contributor
Prüfe ob eins der Wörter aus einer Liste besteht (nur ganze Wörter!):
Code:
       String str = "This is word1 and here you have word2";
        Pattern regex = Pattern.compile("\\b(?:word1|word2|word3)\\b");
        Matcher matcher = regex.matcher(str);
        System.out.println(matcher.find());
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben