【发布时间】:2016-02-22 10:10:00
【问题描述】:
我想将地址拆分为城市、州和邮政编码。
现在使用我当前的正则表达式模式,我已经可以获取邮政编码和州,但我无法匹配城市。
这是我目前的模式
/\s*([^,]+?)\s*((?:\w{2,3}|(AVE))[A-Z]+?(?:\s[A-Z]+)?)\s*(\w{2})\s*(\d{5}(?:-\d{4})|\d{5}(?:-\s\d{4})?)/
演示:https://regex101.com/r/kQ2dE7/1
通过上面的演示,我能够正确匹配城市,但这不适用于其他类型的地址。
https://regex101.com/r/kQ2dE7/2
https://regex101.com/r/kQ2dE7/4
我希望第一个捕获组仅匹配包含数字的单词或仅包含数字的单词或 ST、CT、AVE、DR 等单词。
例如:
11111 A BAY RD AAA111 SUNNY ISLES BEACH FL 33160-4266
11111 A BAY RD AAA111
阳光岛海滩
FL
33160-4266
第一个匹配组应检查它是否包含“ST”/“CT”/“DR”/“AVE”或带数字的单词。然后它将匹配直到那个单词。
此外,如果字符串中有该单词的两个实例,那么它应该匹配到最远的单词。
例子:
111 11TH ST AAAA2 BROOKLYN NY 11209- 4940
111 街 AAAA2
布鲁克林
纽约
11209-4940
(在这个例子中,ST 和一个带有数字的单词存在,那么它应该匹配直到带有数字的单词。)
这就是为什么我试图创建一个条件语句来匹配我的正则表达式模式中的某些单词。如何在正则表达式中实现这一点?
【问题讨论】:
-
这是徒劳的,尤其是在您接受用户输入的情况下。如果您可以更清楚地说明所需的正则表达式,可能有人可以想出一个,但它永远不会可靠地工作。排列太多了。
标签: php regex preg-match-all