用于状态缩写的PHP正则表达式

Jer*_*ris 1 php regex

我意识到这不是"让我成为一个正则表达式"的网站,但我老实说试图在我自己解决这个问题一段时间.我对正则表达式很糟糕.

基本上,我正在解析位置搜索的查询,其中可能包括各种变体,如"区域,城市,州,邮编"以及介于两者之间的所有内容(带或不带逗号),缩写状态或拼写等.

我正在努力与州缩写.主要是因为它并不总是像"VA"那样在任何一侧都有空格,而是它可能是字符串的结尾.我一直在用RegEx工具测试这些,这里有一对我试过的"VA":

/(VA)(\ s | \n |\r)/ < - DOESNT全部工作

/(VA)[^ A-Z0-9]*/< - 在最后允许数字和字母结束

我想我只需要一些关于如何做到这一点的指导?

[编辑] @Igor Korghov

我有一系列带有海岸线的州缩写:

$stateAbbreviations  = Array('AL','AK','CA','CT','DE','FL','GA','HI','LA','ME','NH','NJ','NY','NC','OR','MD','MA','MS','RI','SC','TX','VA','WA');
Run Code Online (Sandbox Code Playgroud)

稍后在我的代码中,我循环遍历这些并尝试在我的$查询中匹配它们,这是用strtoupper()大写的.

$query = "LESNER BRIDGE, VIRGINIA BEACH, VA 23453";

foreach($this->stateAbbreviations as $state)
{
   if(preg_match("/( VA)[^A-Z0-9]*/", $query, $match))
   {                    
      var_dump($match);
   }
}
Run Code Online (Sandbox Code Playgroud)

我意识到一种更有效的方法是找到隔离的2个字符块,然后与我的数组进行比较,但目前,我只是搞乱测试以确保我甚至可以抓住缩写.

Tot*_*oto 5

在缩写周围使用单词边界:

/\b(VA)\b/
Run Code Online (Sandbox Code Playgroud)

一般正则表达式:

/\b([A-Z]{2})\b/
Run Code Online (Sandbox Code Playgroud)

将您的代码更改为:

$stateAbbreviations  = Array('AL','AK','CA','CT','DE','FL','GA','HI','LA','ME','NH','NJ','NY','NC','OR','MD','MA','MS','RI','SC','TX','VA','WA');

$query = "LESNER BRIDGE, VIRGINIA BEACH, VA 23453";
foreach($this->stateAbbreviations as $state) {
   if(preg_match("/\b($state)\b/", $query, $match)) {                    
      var_dump($match);
   }
}
Run Code Online (Sandbox Code Playgroud)