我正在研究一个蜘蛛来按类型过滤联系信息,而且我遇到了似乎有很多承诺的正则表达式。唯一的问题是它需要整个邮寄地址才能通过审查。
^(?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})?))$
我需要表达式只需要街道号和名称。但是,我并不了解每个表达方式是如何分解的。否则,我自己做出改变。 如何更改表达式以接受街道号码上最多4位数的邮件地址,后跟任何类型的单词(因为输入地址时没有强大的验证系统)?
123 Park Ave Apt 123 New York City, NY 10002
P.O. Box 12345 Los Angeles, CA 12304
123 Main St
123 City, State 00000
123 street city, ST 00000
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
答案 0 :(得分:1)
这可能是一个好的开始
/^(\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];
}
?>
正在测试......:)