Frage zu regulärem Ausdruck
Johnny B.
- perl
Hallo SelfHTML-Forum,
ich habe folgenden regulären Ausdruck:
push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
$suchtext = "Raum Berlin"
Er findet "Berlin".
Ist allerdings $suchtext = "Raum Region Berlin",
findet er nur "Region".
Erwartet hätte ich "Region Berlin" als Ergebnis.
Wieso findet er "Berlin" dann nicht mehr?
Merci für's Augen-Öffnen...
Wieso findet er "Berlin" dann nicht mehr?
Weil er "Raum" zuerst findet dann einen whitespace und dann "Region". Und dieses Region befriedigt ihn vollkommen.
Wenn du mit der Folge Raum Region Stadt rechnest, dann musst du schon einen Quantifier beigeben:
/\b(?:(?:region|raum|stadt)\s+)+([A-Za-z]+?)\b/gmi
PS /s ist unnötig denn du hast keinen "." als Zeichengruppe
mfg Beat
Wenn du mit der Folge Raum Region Stadt rechnest, dann musst du schon einen Quantifier beigeben:
/\b(?:(?:region|raum|stadt)\s+)+([A-Za-z]+?)\b/gmi
--- raffiniert!
Danke schön, Beat!
Hi,
push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
$suchtext = "Raum Berlin"
Er findet "Berlin".
und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?
Cheatah
Hi,
»» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
»»
»» $suchtext = "Raum Berlin"
»»
»» Er findet "Berlin".und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?
Raum VS: Kuckuck-Uhren
N: Lebkuchen
SCNR ;-)
Horst
Hi,
»» »» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
»» »» $suchtext = "Raum Berlin"
»» »» Er findet "Berlin".
»»
»» und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?Raum VS: Kuckuck-Uhren
N: Lebkuchen
ich liebe Regular Expressions ;-)
Cheatah
»» »» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
»» »» $suchtext = "Raum Berlin"
»» »» Er findet "Berlin".
»»
»» und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?Raum VS: Kuckuck-Uhren
N: Lebkuchenich liebe Regular Expressions ;-)
Tja wenn du alles matchen willst kannst du nichts matchen.
Hinter jeder RE steht eine proprietäre RFC...
Raum UNICODE_ZEICHEN_FÜR_ÖFFENTLICHES_KLO
mfg Beat
Hi,
»» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
»» $suchtext = "Raum Berlin"
»» Er findet "Berlin".
und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?
oder "Raum Bad Tölz"
(nein, da wird nicht der "Bulle von Tölz" gefunden)
cu,
Andreas
und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?
--- "Villingen" und "Nuernberg", da Umlaute und Sonderzeichen in $suchtext vorher bereits bereinigt worden sind.
"Villingen" kommt manuell in die Liste der Orts-Vor-Namen, nach denen noch ein zweites Wort folgt, wie z.B. auch "Bad" oder "Gross" oder "Timmendorfer". Diese Doppel-Ortsnamen werden dann später mit dem in $suchtext folgendem Wort ergänzt. :-)
Aber besten Dank für den Hinweis!
RegEx-Stolperfallen-Alarm...
@@Johnny B.:
--- "Villingen" und "Nuernberg", da Umlaute und Sonderzeichen in $suchtext vorher bereits bereinigt worden sind.
?? Was heißt „bereinigt“?
Die deutsche Sprache verwendet nun mal Umlaute und ß. Es ist wohl töricht, diese durch ae, oe, ue, ss zu ersetzen.
Lass die Daten in Ruhe und bring deiner Software bei, diese richtig zu verarbeiten!
Live long and prosper,
Gunnar