Hallo Matthias,
du hast insofern recht, dass die Regex Spaces enthält und deswegen nur eine Straße findet die in Spaces eingeschlossen ist.
Aber die Spaces sind trotzdem so eine Sache. <span id="strasse">Eduard-Möricke-Straße</span>
würde nicht gefunden, und in "Der Kunde wohnt in der Eduard-Möricke-Straße." wäre auch ein Fehltreffer.
Wie wäre es mit dieser Regex?
/(?<=[\s>]|^)[\p{L}-]+[Ss]traße(?=[\s<,.!?]|$)/
Teil 1: (?<=[\s>]|^)
positive lookbehind, stelle vor dem Match ein Space, ein > oder den String-Anfang sicher
Teil 2: [\p{L}-]+[Ss]traße
Eine Sequenz von Unicode-Letterzeichen (case insensitive) oder einem Bindestrich (Frage: Was ist mit anderen Unicode-Bindestrichzeichen?), 1-N mal, dann Straße mit kleinem oder großem s.
Teil 3: (?=[\s<,.!?]|$)
positive lookahead, stelle hinter dem Match ein Space ein < oder . oder , oder ! oder ?, oder das String-Ende sicher.
Straße des 17. Juni oder Berliner Hauptstraße findet man damit natürlich trotzdem nicht, das liegt daran, dass man hier die falsche Datenbasis durchflöht.
Die Frage müffelt eigentlich nach einem Datenklau von fremden Webseiten.
Rolf
sumpsi - posui - obstruxi