# Sammlung regulärer Ausdrücke



## The_S (19. Sep 2007)

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:


```
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


----------



## SlaterB (19. Sep 2007)

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 (19. Sep 2007)

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


----------



## SlaterB (19. Sep 2007)

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 (19. Sep 2007)

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


----------



## SlaterB (19. Sep 2007)

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 (19. Sep 2007)

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


----------



## André Uhres (19. Sep 2007)

Beginnt ein regex so:
(?i)
 --> macht den regex *case insensitive*


----------



## André Uhres (19. Sep 2007)

Prüfe ob eins der *Wörter *aus einer Liste besteht (nur ganze Wörter!):

```
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());
```


----------



## Marco13 (19. Sep 2007)

Nette Idee. Wenn es da nicht diese Seite gäbe...
http://regexlib.com/DisplayPatterns.aspx


----------



## The_S (19. Sep 2007)

Marco13 hat gesagt.:
			
		

> Nette Idee. Wenn es da nicht diese Seite gäbe...
> http://regexlib.com/DisplayPatterns.aspx



Hm, ich ignorier das jetzt einfach mal


----------

