2

我想知道如何在地址字符串中查找邮政编码并使用 regex in 使其成为自己的变量。

例如 $address = '123 My Street, My Area, My City, AA11 1AA'

我想$postcode = 'AA11 1AA'

我还想删除从地址字符串中找到的邮政编码。

到目前为止我有这个。

$address = strtolower(preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $data[2]));

$postcode = preg_match("/^(([A-PR-UW-Z]{1}[A-IK-Y]?)([0-9]?[A-HJKS-UW]?[ABEHMNPRVWXY]?|[0-9]?[0-9]?))\s?([0-9]{1}[ABD-HJLNP-UW-Z]{2})$/i",$address,$post);
$postcode = $post;
4

5 回答 5

4

这对我有用:

$value = "Big Ben, Westminster, London, SW1A 0AA, UK";

$pattern = "/((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))/i";

preg_match($pattern, $value, $matches);

$value = $matches[0]; // Will give you SW1A 0AA

http://www.sitepoint.com/community/t/extract-uk-postcode-from-string/31962

于 2015-11-12T11:51:25.430 回答
1

您可以尝试用“,”分割字符串。然后,邮政编码将是结果数组的最后一项(我对 php 了解不多,但这是我第一次知道如何做到这一点)。

于 2013-08-14T14:37:54.137 回答
1

如果它始终按照您显示的顺序,您可以使用以下内容。我对第一组之后的逗号使用了积极的前瞻性断言,然后是文字逗号。然后我在断言后面使用积极的外观来表示逗号,然后是一个潜在的(多个)空白字符(我们没有在一个组中捕获),然后是字符串中的其余字符。由于整个字符串必须全部为真才能进行匹配,因此该字符串仅与您指定的方式匹配(这就是为什么没有多个分组对的原因)。(?=,),(?<=,)\s*

<?php
$address = "123 My Street, My Area, My City, AA11 1AA";
$splitter = "!(.*)(?=,),(?<=,)\s*(.*)!";
preg_match_all($splitter,$address,$matches);

print_r($matches);

$short_addr = $matches[1][0];
$postal_code = $matches[2][0];

?>

输出

Array
(
    [0] => Array
        (
            [0] => 123 My Street, My Area, My City, AA11 1AA
        )

    [1] => Array
        (
            [0] => 123 My Street, My Area, My City
        )

    [2] => Array
        (
            [0] => AA11 1AA
        )

)   
于 2013-08-14T15:31:33.737 回答
1

如果您想在这方面过度使用并处理所有可能的邮政编码变体,建议使用“官方”英国政府数据标准邮政编码正则表达式,如下所述:RegEx for matching UK Postcodes。所以像:

$postcodeRegex = "/(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})/i";
if (preg_match($postcodeRegex, $address, $matches))
{
    $postcode = $matches[0];
}

(这给出了一般的想法,但正则表达式可能需要稍微调整,因为正则表达式的风格可能会有所不同)。

于 2013-08-14T15:16:38.210 回答
1

这个正则表达式希望对你有所帮助

$address = '123 My Street, My Area, My City. AA11 1AA';

preg_match('/(.*)\.([^.]*)$/', $address, $matches);
$postcode = $matches[2];

### Output    
var_dump($matches);
array (size=3)
  0 => string '123 My Street, My Area, My City. AA11 1AA' (length=41)
  1 => string '123 My Street, My Area, My City' (length=31)
  2 => string ' AA11 1AA' (length=9)
于 2013-08-14T15:18:09.723 回答