Quilmes hat geschrieben:Code: Alles auswählen
:~$ [[ "hallo" =~ ^([A-Za-z0-9äöüß-_.])+$ ]] && echo matched
Die RegExp enthält den Zeichenbereich von ß bis _, und der ist ungültig weil ß nach _ kommt. Deshalb schlägt es fehl.
Quilmes hat geschrieben:Code: Alles auswählen
:~$ [[ "hallo" =~ ^([A-Za-z0-9äöüß_.-])+$ ]] && echo matched
matched
Diese RegExp ist valide, weil das Minus am Ende literal (als das Zeichen Minus) gewertet wird.
Quilmes hat geschrieben:Code: Alles auswählen
:~$ [[ "hallo" =~ ^([A-Za-z0-9-_.])+$ ]] && echo matched
Diese RegExp ist nicht erlaubt weil bei 0-9-_ nicht klar ist ob 0-9 oder 9-_ als Bereich angesehen werden soll. Deshalb schlägt es fehl.
Demnach hat es mit der Reihenfolge der Sonderzeichen zu tun. Minus am Ende tut's nicht.
Wenn du das Minus literal meinst, dann musst du es ans Ende der Zeichenklasse packen, sonst wird es als Bereichssonderzeichen angesehen.
Was mir aber unklar bleibt:
Es fehlen die Klammern der Zeichenklasse. [:alnum:] wird als Ganzes (inkl. eckigen Klammern) durch die enthaltenen Zeichen ersetzt. Wenn diese in einer Zeichenklasse stehen sollen, dann musst du die eckigen Klammern der Zeichenklasse drum rum machen:
Ist ein bisschen verwirrend.