2012-02-03 67 views
1

我意識到SO並不是「讓我成爲正則表達式」的網站,但我真的試圖單獨解決這個問題。我在正則表達式上很糟糕。PHP縮寫狀態的正則表達式

基本上,我解析了一個位置搜索的查詢,其中可能包括諸如「區域,城市,州,郵編」以及其間的所有內容(有或沒有逗號),縮寫狀態或拼寫等各種變化。 。

我正在努力與國家縮寫。主要是因爲它並不總是像「VA」那樣在任何一邊都有空間,相反它可能是字符串的結尾。我在一個RegEx tool一直在測試這些,這裏有一對夫婦,我嘗試了 「VA」:

/(VA)(\ S | \ n | \ R)/ < - 不工作在所有

/(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'); 

後來在我的代碼,我通過這些循環,並試圖在我的$它們匹配查詢這是與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); 
    } 
} 

我實現更有效的方式是隻要找到孤立的2字符塊,並且然後與我的數組,但就目前而言,我只是測試周圍搞亂,以確保我甚至可以抓住的縮寫。周圍的縮寫

+0

你能添加一些例子? – 2012-02-03 18:28:38

+0

請定義一些字符串,正則表達式應匹配 – DerVO 2012-02-03 18:30:03

+0

@IgorKorkhov我添加了一些信息。 – 2012-02-03 18:38:25

回答

5

使用單詞邊界:

/\b(VA)\b/ 

一般的正則表達式:

/\b([A-Z]{2})\b/ 

你的代碼更改爲:

$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); 
    } 
} 
+0

輝煌。我需要閱讀word boundarys! – 2012-02-03 18:45:48

3

結束行的字符在常規表達式爲$,並且行首字符爲^,所以th是可能是你在找什麼:

/(^|[ ,])[A-Z]{2}($|[ ,])/ 

這將匹配:行

  • 開頭,空間,逗號
  • ...之後2大寫字母
  • ...其次是線的末端,空間,逗號
+2

剛剛吐出我們的正則表達式的人會大大地激發我。 – phpmeh 2012-02-03 18:39:29

0
/\s+[A-Z]{2}\s+/ 

將匹配任何一方有明確的(一個或多個)空格或兩個大寫字母

+0

如果它位於字符串的開頭或結尾,則不匹配。 – Toto 2012-02-03 18:39:36