Regex anpassen

Mika34

Bekanntes Mitglied
Hi nochmal,

Ich bin gerade dabei einen Regex zu erstellen und habe gemerkt, dass es nicht so wirklich klappt. Irgendwie verstehe ich den Aufbau noch nicht so ganz.
Code:
(^delete track$)
Dieser Regex nimmt nur einen String an, welcher "delete track" ist. Möchte ich nun, dass nach dem "track" ein Leerzeichen kommt und dann positive Integer-Werte kommt, wie stelle ich das dann an?
Ich habe an:
Code:
(^delete track$)(\s)([0-9]+)
gedacht, jedoch funktioniert dies nicht. Könnte mir einer erklären, wie man gezielt solche Regex baut, bei denen ein Teil fest definiert ist und der Rest in Maßen frei wählbar ist.

Darüber wäre ich tierisch dankbar!
 
Denn in Eclipse passt er mir den Regex automatisch so an:
Code:
(^delete track)(\\s)([0-9]+)$ //mit \\ statt \ bei dem s
und dann entspricht dies nicht mehr dem Regex, zumindest im Regex Tester
 
🙂 In Java hat der Backslash in Strings die Funktion, nachfolgenden Zeichen eine andere Bedeutung zu geben. So ist es möglich in einem String z. B. Return-Zeichen einzufügen "\r", einen Tabulator ("\t") oder ein beliebiges Unicode-Zeichen "\u0123".

Deswegen muss der Backslash nochmal wiederholt werden, um im String einen Backslash zu erhalten.

Kurz: beide haben Recht aber in Java musst Du die Form mit \\ nehmen.
 
Dann ergibt das Sinn wieso im Tester dort Java-Script ausgewählt ist, ist es dort dann mit einem Backslash?
Ich nehme es mal an, oder?
 
Ich komme gerade echt an meine Grenzen. Wie soll man solch einen Regex angeben: Lowercase Letter, Modifier Letter, Other Letter, Titlecase Letter, Uppercase Letter und die Ziffern 0-9 aus dem Unicode.
Konkateniert man die Regex dann miteinander oder macht man hier Fallunterscheidungen?
 
Dann ergibt das Sinn wieso im Tester dort Java-Script ausgewählt ist, ist es dort dann mit einem Backslash?
JavaScript kennt reguläre Ausdrücke als Literal, d. h. als Teil der Sprache. Notiert wird dieses mit zwei Schrägstrichen, ggf. unmittelbar von Flags gefolgt: /<regex>/<flags>. Dabei wird regex nicht-escaped angegeben.

/\s/.test(' ') liefert z. B. true.

Es gibt aber auch in JavaScript die Möglichkeit, ein RegExp-Objekt zu erzeugen, das im Konstruktor einen regulären Ausdruck als String entgegennimmt. In einem String-Literal müsste man escapen: new RegExp("\\s").test(' ')

EDIT: zu früh abgeschickt...
Wie soll man solch einen Regex angeben: Lowercase Letter, Modifier Letter, Other Letter, Titlecase Letter, Uppercase Letter und die Ziffern 0-9 aus dem Unicode.
Beispiel: [\p{Lu}\p{Ll}] dürfte alle Unicode-Zeichen aus den Kategorien Uppercase und Lowercase Letter matchen.
 
Das erklärt so einiges, aber da frage ich mich: DAs sieht sehr ähnlich aus zu der Vereinigung von Wörtern und formalen Sprachen.
Wenn ich nun [\p{Lu}\p{Ll}] U W[\p{Lu}\p{Ll}] haben möchte, also dass das W immer nur in konkateniert mit [\p{Lu}\p{Ll}] vorkommen kann. Also wenn das nur das W da steht, soll es nicht erkannt werden, aber wenn bspw. W321321fdfd oder WW oder WE da steht, dann soll es erkannt werden.
Gibt es bei den Regex auch eine ähnliche Operation wie die Vereinigung von Mengen U oder muss man hier dann über eine Fallunterscheidung gehen?
 
In eckige Klammern kommen Zeichenklassen und ja, das ist die Vereinigung von Zeichenklassen.

also dass das W immer nur in konkateniert mit [\p{Lu}\p{Ll}] vorkommen kann
Dann schreibst Du einfach "W[\\p{Lu}\\p{Ll}]" - wobei das nur zwei Buchstaben umfasst. Das erste Zeichen ein W, das zweite eben aus der vereinigten Zeichenklasse. Sollen mehrere Zeichen aus der Zeichenklasse folgen, schreibst Du am Ende noch ein "+".
 
Code:
"(^create engine)(\\s)[\\p{Lu}\\p{Ll}]+(\\s)[\\p{Lu}\\p{Ll}]+(\\s)([0-9]+)(\\s)(true|false)(\\s)(true|false)$";
Ich habe nun diesen Regex jedoch schlägt er im Tester gut aus, jedoch in Java reagiert er darauf gar nicht, hat jemand eine Idee?
 
Oh, aber mit
Code:
^(create engine)(\\s)[\\p{Lu}\\p{Ll}]+(\\s)[\\p{Lu}\\p{Ll}]+(\\s)([0-9]+)(\\s)(true|false)(\\s)(true|false)$
geht es immer noch nicht, obwohl es im Tester geht. Irgendwo ist doch hier der Haken
 
Mit ein weniger Spielerei hat es nun geklappt. Ist es nun auch möglich bei dem UTF-8 String Zahlen auch zu erlauben also eine Vereinigung von UTF-8 und ganzzahligen Zahlen
 
Ich verstehe es nicht. Ich meinte, dass das [\\p{Lu}\\p{Ll}]+ U mit ganzzahligen Zahlen möglich ist oder verstehe ich nicht was du meinst
 

Zurück
Oben