Problem mit Regular Expression
Thomas
- sonstiges
1 Beat0 Gunnar Bittersmann
Hallo,
weiß gar nicht ob das das richtige Sektion ist.
Geht um folgendes, ich suche eine RegEx die folgende Bedingungen erfüllt:
* String darf nicht mit Whitespace/Leerzeichen oder einem Komma anfangen
* In dem String sind alle Zeichen, bis auf Kommas erlaubt. Also auch Leerzeichen sind zugelassen
* String darf nicht mit Whitespace oder einem Komma enden
* Der String muss mindestens 1 und maximal 20 Zeichen lang sein
Mit dieser RegEx decke ich zumindest die ersten 3 Bedingungen ab. Allerdings hapert es an der Längenbegrenzung. Was mache ich falsch? Bzw ich bin auch für elegantere Lösungen offen :)
RegEx:
[1]+([^,\t\v\r\f\n]{1,20})[^,\s ]+$
MFG
Thomas
^,\s ↩︎
Geht um folgendes, ich suche eine RegEx die folgende Bedingungen erfüllt:
* String darf nicht mit Whitespace/Leerzeichen oder einem Komma anfangen
/[1]/
* In dem String sind alle Zeichen, bis auf Kommas erlaubt. Also auch Leerzeichen sind zugelassen
/[2][^,]*/
* String darf nicht mit Whitespace oder einem Komma enden
/[3][^,]*[^\s,]$/
* Der String muss mindestens 1 und maximal 20 Zeichen lang sein
also:
/[4]$/
oder
/[5][^,]{0,18}[^\s,]$/
zusammengefasst:
/^(?:[^\s,]|[^\s,][^,]{0,18}[^\s,])$/
Mit dieser RegEx decke ich zumindest die ersten 3 Bedingungen ab. Allerdings hapert es an der Längenbegrenzung. Was mache ich falsch? Bzw ich bin auch für elegantere Lösungen offen :)
RegEx:
[6]+([^,\t\v\r\f\n]{1,20})[^,\s ]+$
Interessant, dass du nur eine untergruppe von whitespace erfasst...
mfg Beat
Vielen Dank dafür ihr beiden :)
Allerdings ist im Mittelteil jeglicher Whitespace zugelassen. Dieser soll aber bis auf Leerzeichen verboten sein. Was muss ich dann ändern?
Vielen Dank dafür ihr beiden :)
Allerdings ist im Mittelteil jeglicher Whitespace zugelassen. Dieser soll aber bis auf Leerzeichen verboten sein. Was muss ich dann ändern?
Die Beschreibung deiner Aufgabenstellung.
Und ich frage gleich noch nach: Gilt dies auch für das erste und das letzte Zeichen?
mfg Beat
Nein das gilt nur für den Mittelteil.
MFG
Thomas
Nein das gilt nur für den Mittelteil.
Dann beschreibe zwei zeichenklassen, die für Anfang/Ende und für alles dazwischen gelten.
Eine Zeichenklasse kann entweder positiv beschrieben werden, oder negativ, aber nicht gemischt.
mfg Beat
Kannst du mir bitte auch erklären was du mit Zeichenklasse meinst? Ich bin im RegEx Bereich noch neu und kenne noch nicht alle Tricks und Kniffe.
Meinst du 2 getrennte Expressions, welche ich dann nacheinander abrufe?
Kannst du mir bitte auch erklären was du mit Zeichenklasse meinst?
[a-z] eine positive Zeichenklasse
[^a-z] eine negierte Zeichenklasse
mfg Beat
@@Thomas:
nuqneH
Könntest du mir bitte auch den : erklären. Hab jetzt schon eine Menge gelesen, aber die Bedeutung des : ist mir nicht klar.
?: gehört zusammen und ist auch in SELFHTML http://de.selfhtml.org/perl/sprache/regexpr.htm#rangfolge@title=erläutert.
Qapla'
aha alles klar :)
Die RegEx klappt immer noch nicht :(
@@Thomas:
nuqneH
aha alles klar :)
Die RegEx klappt immer noch nicht :(
Wie sieht der Ausdruck denn jetzt aus?
Der Ausdruck in der Mitte erweitert um die nicht erwünschten Whitespace-Zeichen (wie du es anfangs hattest) sollte doch das Gewünschte tun.
Qapla'
@@Thomas:
nuqneH
[1](?:[^,\s][\S ]{0,18}[^\s,])?$
[^,\s][\S ]{0,18} heißt: ein Zeichen außer Komma und Whitespace gefolgt von 0 bis 18 Zeichen außer Whitespace, wobei Leerzeichen doch erlaubt sind. Das ist nicht das, was du willst.
und ich weiß ehrlich gesagt nicht, wie ich den Mittelteil anpassen soll.
Ich sagte doch: „wie du es anfangs hattest“.
[^,\t\v\r\f\n]{0,18}
0 bis 18 Zeichen außer Komma und Whitespace, wobei Leerzeichen doch erlaubt sind.
Qapla'
^\s, ↩︎
Achso - ich dachte damit decke ich nicht jeglichen Whitespace ab? Es sollen ja nur Leerzeichen erlaubt werden.
@@Thomas:
nuqneH
Allerdings hapert es an der Längenbegrenzung. Was mache ich falsch?
[1]+([^,\t\v\r\f\n]{1,20})[^,\s ]+$
Durch die '+' lässt du vor und nach dem Teil, der 1 bis 20 Zeichen lang ist, jeweils beliebig viele Zeichen (min. 1) zu.
BTW, das ',' muss wohl nicht escapet werden.
Qapla'
^,\s ↩︎