RegExp in Aktion: Suffix als Filterkriterium
Immer mal wieder bin ich froh, das es RegularExpressions gibt. Sie helfen sehr dabei, schnell Änderungen in umfangreichen, strukturierten Texten (z.B. Quellcode ) vorzunehmen.
Ab und zu passiert es mir, das ich mir einen regulären Ausdruck erarbeite und 2 Wochen später einen ähnlichen Fall habe, den RegExp aber nicht dokumentiert habe – und mir nochmal erarbeite. Das hilft zwar, das Schreiben regulärer Ausdrückezu üben, ist aber nicht unbedingt effizient
Daher fange ich mal an den Ausdruck, der mir heute geholfen hat festzuhalten:
Es geht darum, alle vorkommen von „document“ mit „documents“ zu ersetzen. Natürlich sollen dabei die Vorkommen, bei denen das „s“ bereits angehängt ist, nicht ersetzt werden um nicht mit einem „documentss“ zu enden. Zum Testen als die Varianten:
document
documentReader
documentsFolla
Document
Des Rätsels Lösung ist der Ausdruck
(document)(?!s)
Den man z.B. im Sublime Editor oder in IntelliJ IDEA problemlos verwenden kann, wie im Screenshot zu sehen.
Bei dem ?! handelt es sich um ein sogenanntes „negative lookahead“, mehr dazu unter regular-expressions.info
Have fun!
Am 27. Juni 2018 um 11:42 Uhr
Warum nicht einfach:
/(document)[^s]/
Scheint in rubular.com und regex101.com zu funktionieren
Am 27. Juni 2018 um 13:45 Uhr
Weil das das Zeichen nach dem t mit matched, im Beispiel oben den Zeilenumbruch in der ersten Zeile und das R in der zweiten.
Wenn ich damit ein replace mit „documents“ mache bekomme ich z.b. nicht documentsReader sondern documentsdocumentseader, was die erste und zweite Zeile zusammen ergibt