2016-01-21 101 views
2

我有這個樣本地址查詢路線:PHP:正則表達式中的地址

405W¯¯南街1號西#910

而且我有這樣的正則表達式表達式提取的準備北有詞,南,西,東,北東,北西,東南,西南地址:

preg_match_all("/(?:(?:north|south)(?:[ ](?:east|west))?|east|west)/i", $address, $match); 

現在,如果我們看一下地址字符串上面,「W」被認爲是一個因此甚至可能有N,S,NW,NE,SE,SW,E,W。所以我們也需要提取這些。

我不太擅長正則表達式,希望你能幫忙嗎?謝謝!

+1

不知道正是你需要的,但儘量[''〜\ B(:北|南)?(:\ H *(?:東|西))\ C | \ b(:???東|西| [NS] [WE] | [EW])\ b〜i''(https://regex101.com/r/rG0cH6/2)。 –

+0

我會和@WiktorStribiżew的回答一起去。更新[版本3](https://regex101.com/r/rG0cH6/3)以包含更多情況(應該完全匹配的事物,應該部分匹配的事物,不應該匹配的事物)。 – OnlineCop

回答

2

您可以使用

\b(?:north|south)(?:\h*(?:east|west))?\b|\b(?:east|west|[NS][WE]?|[EW])\b 

demo

說明

  • \b - 領先的單詞邊界
  • (?:north|south) - 無論是northsouth
  • (?:\h*(?:east|west))? - 零個或更多個水平空白字符(\h*)一種或零次出現,隨後用任一eastwest
  • \b - 尾隨字邊界
  • | - 或...
  • \b - 領先字邊界
  • (?:east|west|[NS][WE]?|[EW]) - 要麼east,west,N,NW,NE,S,SWSE
  • \b - 尾字邊界