ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
532
532
EMPFEHLEN
-
Hallo,
ich suche einen RegEx, der z.B. folgenden Strings findet
Bsp1:
Bsp2:Code :1
Kat1, ein weiteres; noch eins, 234f3,beliebig
Bsp3:Code :1
Kat1; weitere Kategorie, noch eine
- eine Kategorie besteht aus beliebigen Zeichen (auch Leerzeichen)Code :1
nur eine Kategorie
- 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:
was leider nicht so funktioniert.Code :1
[.*\\,.*|.*\\;.*|[^,\\S|^;\\S]*]{0,5)
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
-
18.06.10 09:02 #2Code 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...
; und , sind keine Metazeichen, du benötigst keine vorangestellten \\.[.*\\,.*|.*\\;.*|[^,\\S|^;\\S]*]{0,5)
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
-
public String replaceAll(String regex, String replacement) und das $-Zeichen
Von takidoso im Forum JavaAntworten: 5Letzter Beitrag: 22.11.10, 17:31 -
Regex für String.split(regex)
Von anti43 im Forum JavaAntworten: 3Letzter Beitrag: 22.11.10, 12:14 -
RegEx Generator, vom String zum RegEx?
Von tequila slammer im Forum .NET CaféAntworten: 11Letzter Beitrag: 15.11.10, 07:58 -
REGEX Problem - Regex auf den gesamten String anwenden?
Von angelikamorgan im Forum JavaAntworten: 1Letzter Beitrag: 21.01.08, 16:58 -
String bei Semikolons verhacken und in Array legen
Von lukelukeluke im Forum JavaAntworten: 13Letzter Beitrag: 17.12.04, 12:05





Zitieren
Login





