Thread Regex für Timestamp matcht nicht so wie gewünscht (25 answers)
Opened by GwenDragon at 2024-02-01 12:07

Linuxer
 2024-02-01 14:56
#195807 #195807
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
IMHO "stoppt" die Engine da nicht, sondern sie versucht schon, die optionalen Teile zu greifen, gibt sich dann aber mit weniger zufrieden (weil es ja optionale Teile sind).

Ich versuche es nochmal anders für den String +123A1234.11:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
(\D)? # ist erstmal gierig, greift das "+" ab, und ist damit erfüllt
(
\d+ # schnappt sich die "123" direkt nach dem "+", ist damit auch erfüllt
(
\.\d+ # Punkt und Ziffern können hier jetzt nicht passen, weil da steht das "A" im Weg
)? # Dank des "A" wird getestet, ob es ohne das optionale .\d+ denn passen würde
# und das tut es; das optionale .\d+ ist "quasi" der Leerstring zwischen "+123" und "A"
)
# Regex Ende ohne Ende-Anker.
# Und ohne Ende-Anker ist der Regex somit erfüllt.


Der entscheidende Punkt ist IMHO das ? für .\d+.
Ohne den Ende Anker ist die Engine zufrieden, wenn sie vor dem A abbrechen kann.
Sie hat damit keinen Grund, sich den Rest noch anzuschauen.
Der Ende-Anker stellt sicher, dass da die Buchstaben (oder andere Nicht-Ziffern) nicht sein dürfen.
Last edited: 2024-02-01 14:58:39 +0100 (CET)
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 Regex für Timestamp matcht nicht so wie gewünscht