Thread not greedy enough? (6 answers)
Opened by linuxCowboy at 2021-07-01 17:37

Linuxer
 2021-07-01 20:33
#193394 #193394
User since
2006-01-27
3779 articles
HausmeisterIn

user image
Perl soll nichts ausgeben? Dann lass den Schalter -p weg! Fertig.

Ansonsten ist die Regex-Engine hier durchaus gierig wie ein Banker.
Man muss nur verstehen wie sie arbeitet. Denn sie ist zu mehr in der Lage als ein generischer Banker.Sie kann auch einen oder mehr Schritt zurücktreten und versucht es dann solange mit weniger gierigen Varianten, bis es eine Version findet die ein Ergebnis liefern kann. In diesem Fall eben solange, bis das b keine Rolle mehr spielt. Das hast Du ihm aber vorgegeben, indem Du den Quantifier * verwendet hast.


Dann ist der Regex nicht der Anforderung entsprechend.

Suchst Du vielleicht den Quantifier + anstatt * ?
Vielleicht kannst Du das Pattern verankern?

Code: (dl )
1
2
3
4
$ echo abc | perl -pe 's/(?<!a)(b)+c/x$1c/'
abc
$ echo abc | perl -pe 's/^(?<!a)(b)*c/x$1c/'
abc


Zum Verständnis von Regulären Ausdrücken sei das Buch "Regular Expressions" von Jeffrey Friedl empfohlen; siehe http://regex.info/book.html
Last edited: 2021-07-01 20:37:57 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread not greedy enough?