Antwort #375 am: 03. Juli 2022, 20:12:04
@Timm, @Tomcraft
Ich denke man kann das trotzdem hinbekommen, nur nicht mit einer einzigen Regex.
Man müsste für das erste
preg_match_all() im Code noch ein weiteres benutzen.
Das hier z.B. würde deine Berliner Adresse catchen, Timm:
"#(?<!str\. )(?<![0-9])[0-9]{1,5}[\/ \-0-9a-zA-Z,\.]*#im"
Dann jedoch würden normale Strassennamen wie "Teststr. 75" nicht mehr erkannt, weil auch dort "str. und eine Zahl" vorkommt.
Wenn man bei einem leeren Ergebnis dann jedoch die bisherige Regex hinterhersendet erwischt man die normalen Strassen nach dem genannten Muster wieder.
Das also wäre eine wohl eine Lösung (*edit* anstelle des ersten
preg_match_all *end_edit*):
private function parse_street_address
($street_address) { preg_match_all("#(?<!str\. )(?<![0-9])[0-9]{1,5}[\/ \-0-9a-zA-Z,\.]*#im", $street_addr, $matches, PREG_SET_ORDER
); if (count($matches) < 1) { preg_match_all("! [0-9]{1,5}[/ \- 0-9a-zA-Z,\.]*!im", $street_address, $matches, PREG_SET_ORDER
); )... Für das erste Problem von
crewshop24 hatte ich ja eine Lösung in
Antwort #370 gepostet und diese ist im Vorschlag hier bereits enthalten.
Gruß,
noRiddle
*NACHTRAG*
Wenn man diese Berliner Straßen nicht nur so "Str. 50 15C" sondern auch ausgeschrieben, also so "Straße 50 15C" schreiben kann, dann ist mein Lösungsansatz wieder hinfällig.