2015-10-02 6 views
0

Я работаю над проектом, состоящим в сортировке адреса.Regex PHP, условия

У меня есть типичный адрес, например: 25 Down Street 15000 London.

С другой стороны я получил более конкретный адрес, например, с 25 **B** Down Street 15000 London.

Я нашел способ выбрать только количество улиц с этим регулярным выражением: \b([1-9][0-9]{0,2}).

Но, как вы можете увидеть некоторые адреса содержит другую букву, которая является частью числа (например, 25 А, 25 Б ..)

Так что теперь я искать регулярное выражение в состоянии найти номера улицы, даже если он содержит больше чем просто число.

Пример: Если адрес 25 Down Street (я хочу найти 25) и если адрес 25 B Down Street (я хочу найти 25 B)

Продолжайте поиски, но, возможно, вы получили представление о том, чтобы помочь мне.

Спасибо

+0

Как вы можете быть уверены, что вы будете соответствовать письмо, принадлежащее к числу, но не на название улицы? См. [Это демо] (https://regex101.com/r/lZ0aM4/2). Есть ли какие-либо предположения? –

+0

Если только одна буква соответствует номеру, это означает, что это информация, связанная с номером, который мои данные строятся на этом принципе. Я проверил ваше регулярное выражение и отлично работает. (Вы можете объявить ответ другим людям) и спасибо. – VERYNET

+0

Редактировать: что, если я не ищу только одну букву, а конкретное слово? Примером может служить: 25 BIS Down Street? конкретное слово здесь - BIS – VERYNET

ответ

1

Если у вас есть только один латинская буква после первого 1-3-значного числа в строке, вы можете использовать следующее регулярное выражение:

'/^[1-9][0-9]{0,2}(?:\s*[A-Z])?\b/' 

См demo

граница слова \b будет следить за тем, чтобы после латинской буквы не было символа слова после следующего пробела. Если письмо отсутствует, то \b по-прежнему будет следить за номером, за которым следует символ без слов, который, по-видимому, соответствует вашим требованиям.

Если вы хотите, чтобы просто взять на себя следующий ALLCAPS слово после того, как первый номер принадлежит к числу, использование:

'/^[1-9][0-9]{0,2}(?:\s*[A-Z]+)?\b/' 
          ^