PHP正则表达式为北/南/东/西

时间:2016-01-11 21:11:57

标签: php regex

我的地址是:西一街西街123号#910 我想要实现的是提取北,南,东,西,东北,西北,东南和西南的字样。

这就是我所做的:

$address = '123 West 1st Street South West #910';

$array = array('north','south','east','west','north east','north west','south east', 'south west');

foreach ($array as $val) {
    if (preg_match("/$val/i", $address, $match, PREG_OFFSET_CAPTURE)) {
        //do your stuff here
    }
}

使用上面的代码,我想得到整个单词“south west”的偏移量加上名称本身,但是通过数组我得到了最后一个在地址字段的西边。

我们将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

不要试图单独匹配每个,但让正则表达式引擎弄明白。它会先尝试让你获得最长的匹配,按照你提供的顺序尝试各种可能性。

(?:(?:north|south)(?:[ ](?:east|west))?|east|west)

Demo

在这里,您可以获得所有可能的案例。