2016-01-21 3 views
2

У меня есть этот образец адрес:PHP: Regex для получения направления в адрес

405 W 1st Street Юго-запад # 910

И я это выражение регулярное выражение для извлечения возможности адрес, который имеет слово Север, Юг, Запад, Восток, Северо-восток, северо-запад, юго-восток, Юго-Запад:

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

Теперь, если мы посмотрим на строку адреса выше, «W» считается s West, так что могут быть даже N, S, NW, NE, SE, SW, E, W. Поэтому нам также нужно их извлечь.

Я не слишком хорошо разбираюсь в регулярных выражениях, надеюсь, что вы могли бы помочь? Благодаря!

+1

не знаю, что именно вам нужно, но попробуйте [ ' '~ \ б (?: Север | юг)? (: \ Ч * (?: восток | запад)) \ б | \ б (?:? восток | запад | [NS] [WE] | [EW]) \ б ~ 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) - либо north или south
  • (?:\h*(?:east|west))? - один или ноль вхождения нуля или более горизонтальных непечатаемых (\h*), а затем либо east или west
  • \b - буксируемый граничном слово
  • | - или ...
  • \b - ведущий границы слова
  • (?:east|west|[NS][WE]?|[EW]) - либо east, west, N, NW, NE, S, SW, SE
  • \b - конечные границы слова
Смежные вопросы