Gibt es eine Implementierung von Regex, die es erlauben, die Gruppe in Regex durch Kleinbuchstaben zu ersetzen?Regex-Implementierung zum Ersetzen der Gruppe durch ihre Kleinbuchstaben Version
Antwort
In Perl, können Sie tun:
$string =~ s/(some_regex)/lc($1)/ge;
Die /e
Option bewirkt, dass der Ersatz-Ausdruck als Perl-Code interpretiert werden ausgewertet werden, deren Rückgabewert als der endgültige Ersatzwert verwendet. lc($x)
gibt die niedrigere Version von $x
zurück. (Nicht sicher, aber ich gehe davon aus, dass lc()
in den letzten Perl-Versionen korrekt mit internationalen Zeichen umgehen wird.)
/g
bedeutet Übereinstimmung global. Lassen Sie die g
aus, wenn Sie nur einen einzigen Ersatz wünschen.
In Perl gibt es
$string =~ tr/[A-Z]/[a-z]/;
meisten Regex-Implementierungen können Sie eine Rückruffunktion zu übergeben, wenn ein Ersatz zu tun, daher können Sie einfach eine Kleinversion des Spiels von dem Rückruf zurück.
s/am meisten/einige/gi? – Rhubbarb
Wenn Ihre Regex-Version unterstützt wird, können Sie \ L, wie dies in einem POSIX-Shell verwenden:
sed -r 's/(^.*)/\L\1/'
+1 für Nicht-Perl-Lösung. Funktioniert in Kate: "\ L \ 1" –
Dies scheint in einer überraschenden Anzahl von Regex-Kits zu funktionieren, selbst wenn Sie sich nicht in einer Shell-ähnlichen Umgebung befinden. – Tim
@Tim: Einverstanden, sogar Notepad ++ unterstützt es. –
Wenn Sie mit einem Editor wie Sublime Text oder Textmate , gibt es eine gute Chance, Sie können
\L$1
als Ersatz verwenden, wo $1
aus dem regulären Ausdruck auf etwas bezieht, das Sie in Klammern setzen. Zum Beispiel , hier ist etwas, das ich Feldnamen in einigen SQL herunterzufahren, alles auf der rechten Seite des 'wie' am Ende einer gegebenen Zeile. Zunächst wird die "find" regulären Ausdruck:
(as|AS) ([A-Za-z_]+)\s*,$
und dann der Ersatz Ausdruck:
$1 '\L$2',
Wenn Sie Vim (oder vermutlich gvim), dann werden Sie wollen \L\1
statt \L$1
verwenden, Aber es gibt noch eine weitere Falte, die Sie beachten müssen: Vim kehrt die Syntax zwischen wörtlichen Klammern und nicht vorhandenen Klammern um. Um also einen Teil des regulären Ausdrucks anzugeben, der in die Ersetzung eingeschlossen werden soll ("captured"), verwenden Sie am Anfang \(
und am Ende \)
. Denken Sie an \
als —, anstatt ein Sonderzeichen zu entgehen, um es zu einem Literal — zu machen, das den Anfang eines speziellen Zeichens markiert (wie mit \s
, \w
, \b
und so weiter). Es mag also merkwürdig erscheinen, wenn Sie es nicht gewohnt sind, aber es ist eigentlich vollkommen logisch, wenn Sie es auf die Vim-Art denken.
Ich habe dies sowohl in Textmate und Sublime Text getestet und es funktioniert, wie sie ist, aber einige Editoren
\1
statt
$1
. Probieren Sie beide aus und sehen Sie, was Ihr Editor verwendet.
Ich habe gerade diese Regex aus meiner Geschichte gezogen. Ich tweege immer Regexen, während ich sie benutze, und ich kann das nicht die endgültige Version versprechen, also schlage ich nicht vor, dass es für den beschriebenen Zweck geeignet ist, und insbesondere nicht mit SQL formatiert anders als die SQL, an der ich gearbeitet habe ein spezifisches Beispiel für das Downcasing in regulären Ausdrücken. YMMV. UAYOR.
Nett, Intellij IDEA unterstützt dies auch –
was natürlich nicht für internationale Zeichen funktioniert .. –
Die [A-Z]? Es war ein Beispiel. Trotzdem habe ich für die Antwort von j_random_hacker gestimmt. –