Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式只查找PHP的街道编号_Php_Regex - Fatal编程技术网

正则表达式只查找PHP的街道编号

正则表达式只查找PHP的街道编号,php,regex,Php,Regex,我正在使用一个spider来按类型过滤联系信息,并且我遇到了一个正则表达式,它似乎有很大的潜力。唯一的问题是,它需要完整的邮寄地址才能通过审查 ^(?n:(?<address1>(\d{1,5}(\ 1\/[234])?(\x20[A-Z]([a-z])+)+ )|(P\.O\.\ Box\ \d{1,5}))\s{1,2}(?i:(?<address2>(((APT|B LDG|DEPT|FL|HNGR|LOT|PIER|RM|S (LIP|PC|T(E|OP))|T

我正在使用一个spider来按类型过滤联系信息,并且我遇到了一个正则表达式,它似乎有很大的潜力。唯一的问题是,它需要完整的邮寄地址才能通过审查

^(?n:(?<address1>(\d{1,5}(\ 1\/[234])?(\x20[A-Z]([a-z])+)+ )|(P\.O\.\ 
Box\ \d{1,5}))\s{1,2}(?i:(?<address2>(((APT|B LDG|DEPT|FL|HNGR|LOT|PIER|RM|S
(LIP|PC|T(E|OP))|TRLR|UNIT)\x20\w{1,5})|(BSMT|FRNT|LBBY|LOWR|OFC|PH|REAR|SIDE|UPPR)\.?)
\s{1,2})?)(?<city>[A-Z]([a-z])+(\.?)(\x20[A-Z]([a-z])+){0,2})\, 
\x20(?<state>A[LKSZRAP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL N]|K[SY]|LA|M
[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD] |T[NX]|UT|V[AIT]|W[AIVY])
\x20(?<zipcode>(?!0{5})\d{5}(-\d {4})?))$
当前被拒绝的输入: 所需的可接受输入: 期望的拒绝输入:
这可能是一个好的开始

/^(\d{1,4}|P\.O\.)([a-zA-Z\s]+)(\d+)?$/i    
/^(\d{1,4}|P\.O\.)\s([a-zA-Z0-9\s]+)\s?(\d+)?$/i
/^(\d{1,4}\s|P\.O\.)([a-zA-Z0-9\s]+)(\d+)?$/i

// passes
123 Park Ave Apt 123
P.O. Box 12345
9784 Hwy 12
92 Main St
972 Smith dr
1809 Caddo St
10200 Highway 5 North

// fails 
123 Main St, New York NY 14676
123 City, State 00000
123 street city, ST 00000
12345 street
用法:

<?php

$address = "123 Park Ave Apt 123";
$pattern = '/^(\d{1,4}|P\.O\.)([a-zA-Z\s]+)(\d+)?$/i';
if(preg_match($pattern, $address, $matches)){
    echo $matches[0];
}

?>

正在进行测试…:)


@Braj,很抱歉。我有个小问题,我错了。那是过去的事。我设置的测试切换了“通过”和“失败”警报。失败的字符串如下:“1020西四街400号套房”、“701北九街”、“2101 Hwy 367 N”、“127 W第四街”和“700 N第二街”。我是否要更新
([a-zA-Z\s]+)
语句,使其类似于
([a-zA-Z]+)|(\d[a-Z\s]+)
?我刚才添加的代码片段实际上不起作用:\(\d[a-z\s]+)=>匹配一个数字,再匹配一个或多个字符和空格。如果你认为这是必要的,那没关系:)你能举个例子吗this@elersong上面的代码片段在粘贴到这里之前已经在我的服务器上测试过了。
123 Park Ave Apt 123 
P.O. Box 12345 
9784 Hwy 12
92 Main St
972 Smith dr
123 Main St, New York NY 14676
123 City, State 00000
123 street city, ST 00000
12345 street
/^(\d{1,4}|P\.O\.)([a-zA-Z\s]+)(\d+)?$/i    
/^(\d{1,4}|P\.O\.)\s([a-zA-Z0-9\s]+)\s?(\d+)?$/i
/^(\d{1,4}\s|P\.O\.)([a-zA-Z0-9\s]+)(\d+)?$/i

// passes
123 Park Ave Apt 123
P.O. Box 12345
9784 Hwy 12
92 Main St
972 Smith dr
1809 Caddo St
10200 Highway 5 North

// fails 
123 Main St, New York NY 14676
123 City, State 00000
123 street city, ST 00000
12345 street
<?php

$address = "123 Park Ave Apt 123";
$pattern = '/^(\d{1,4}|P\.O\.)([a-zA-Z\s]+)(\d+)?$/i';
if(preg_match($pattern, $address, $matches)){
    echo $matches[0];
}

?>