我需要删除除数字之外的所有内容,如果存在,则从字符串中删除一个字符。这是我要提取的门牌号的街道名。字符串后面可能有更多内容,但不是必须的。
原始的字符串就像
Wagnerstrasse 3a platz53,eingang 3,Zi.3005
我用这样的数字提取街道:
preg_match('/^([^\d]*[^\d\s]) *(\d.*)$/', $address, $match);
然后,在“ Wagnerstrasse 3a”上做一个if语句
if (preg_replace("/[^0-9]/","",$match[2]) == $match[2])
我也需要更改正则表达式以便也得到下一个字母,即使它们之间有一个空格也是如此,但前提是它是单个字母,这样我在这种情况下if是true /更好的是一个正则表达式可以删除所有内容,但以下:
Wagnerstrasse 3a <-- expected result: 3a
Wagnerstrasse 3 a <--- expected result 3 a
Wagnerstrasse 3 <--- expected result 3
Wagnerstrasse 3 a bac <--- expected result 3 a
在进行了更多研究之后,并花了几个小时检查该主题的地址(这么多的地址),我找到了一个直到现在都没有失败的解决方案。可能是我没有意识到,但这似乎还不错。这是一个以前从未见过的正则表达式...如果该行中没有数字,则该正则表达式将失败。所以我做了一些骇客活动(提到了数以百万计的九个……)
基本上,正则表达式非常适合在结尾处查找数字,并在文本的中间保留数字,但对于上述事实以及街道以数字开头的情况,则不可行。因此,我做了另一个小小的尝试,将第一个数字炸开了,并抓住了它作为数字。
if ($this->startsWithNumber($data))
{
$tmp = explode(' ', $data);
$data = trim(str_replace($tmp[0], '', $data)) . ' ' . $tmp[0];
}
if (!preg_match('/[0-9]/',$data))
{
$data .= ' 99999999999999999999999999999999999999999999999999999999999999999999999';
}
$data = preg_replace("/[^ \w]+/",'',$data);
$pcre = '/\A\s*
(.*?) # street
\s*
\x2f? # slash
(
\pN+\s*[a-zA-Z]? # number + letter
(?:\s*[-\x2f\pP]\s*\pN+\s*[a-zA-Z]?)* # cut
) # number
\s*\z/ux';
preg_match($regex, $data, $h);
$compare = strpos($h[2],'999999999999999999999999999999999999999999999999999999999999999999999999');
if ($compare !== false) {
$h[2] = null;
}
$this->receiverStreet[] = (isset($h[1])) ? $h[1] : null;
$this->receiverHouseNo[] = (isset($h[2])) ? $h[2] : null;
public function startsWithNumber($str)
{
return preg_match('/^\d/', $str) === 1;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句