tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
532
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RalU RalU ist offline Mitglied Bronze
    Registriert seit
    Mar 2005
    Beiträge
    26
    Hallo,
    ich suche einen RegEx, der z.B. folgenden Strings findet
    Bsp1:
    Code :
    1
    
    Kat1, ein weiteres; noch eins, 234f3,beliebig
    Bsp2:
    Code :
    1
    
    Kat1; weitere Kategorie, noch eine
    Bsp3:
    Code :
    1
    
    nur eine Kategorie
    - eine Kategorie besteht aus beliebigen Zeichen (auch Leerzeichen)
    - der String muss mindestens eine Kategorie enthalten
    - der String darf maximal 5 Kategorien enthalten
    - jede Kategorie wird durch ',' oder ';' getrennt (Leerzeichen vor und nach dem ',' bzw. ';' sind erlaubt)
    - bei einer Kategorie (oder bei der letzten Kategorie) darf kein ',' oder ';' mehr stehen

    bisher hab ich folgendes als RegEX:
    Code :
    1
    
    [.*\\,.*|.*\\;.*|[^,\\S|^;\\S]*]{0,5)
    was leider nicht so funktioniert.

    Vielleicht wäre es eine Alternative, einfach zu prüfen, ob in einem beliebigen String höchstens 4 mal ein ',' oder höchsten 4 mal ein ';' (auch gemicht) vorkommt. Wie könnte denn so ein RegEx aussehen?

    Gruß, Ralf
     

  2. #2
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    import java.util.regex.*;
     
    public class TestFuerRaIU {
        public static void parseCategoryString(String cs) {
            Pattern p = Pattern.compile("[^(;|,)]+([;,][^(;|,)]+){0,4}");
            Matcher m = p.matcher(cs);
            
            if(m.matches()) {
                System.out.println("Richtig");
            }
            else {
                System.out.println("Falsch");
            }
        }
        
        public static void main(String[] args) {
            //richtige Beispiele
            parseCategoryString("Kat1, ein weiteres; noch eins, 234f3,beliebig");
            parseCategoryString("Kat1; weitere Kategorie, noch eine");
            parseCategoryString("nur eine Kategorie");
            parseCategoryString("nur eine Kategorie, noch eins");
            
            //falsche Beispiele
            parseCategoryString("; nur eine Kategorie, ein weiteres");
            parseCategoryString("Kat1;, ein weiteres");
            parseCategoryString("Kat1;");
            parseCategoryString("Kat1, ein weiteres; noch eins, 234f3,beliebig;zu viel");
        }
    }

    Ausgabe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    Richtig
    Richtig
    Richtig
    Richtig
    Falsch
    Falsch
    Falsch
    Falsch

    Edit:
    Zu deinem Regex...
    [.*\\,.*|.*\\;.*|[^,\\S|^;\\S]*]{0,5)
    ; und , sind keine Metazeichen, du benötigst keine vorangestellten \\.
    Wieso benutzt du \\S? Das bedeudet du suchst Zeichen, die keine Whitespaces sind, aber ein Leerzeichen doch auch vorhanden sein?!
    .* ist fatal, du suchst damit ein BELIEBIGES zeichen quasi unendlich lange, damit auch deine , und ;
    Geändert von HonniCilest (18.06.10 um 09:13 Uhr)
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 22.11.10, 17:31
  2. Regex für String.split(regex)
    Von anti43 im Forum Java
    Antworten: 3
    Letzter Beitrag: 22.11.10, 12:14
  3. RegEx Generator, vom String zum RegEx?
    Von tequila slammer im Forum .NET Café
    Antworten: 11
    Letzter Beitrag: 15.11.10, 07:58
  4. Antworten: 1
    Letzter Beitrag: 21.01.08, 16:58
  5. Antworten: 13
    Letzter Beitrag: 17.12.04, 12:05