Мне нужно извлечь первое вхождение числа, найденного в адресе. Адреса всегда начинаются примерно так (я выделил жирным шрифтом то, что я хочу сопоставить) ...
- Квартира 12 , квартира 2 ...
- 12 , Название квартиры
Чтобы сделать его немного сложнее, возможно, что некоторые могут иметь буквы на одной стороне числа, например ...
- Квартира 12 a, Квартира 2 ...
- 12 th Room, корпус 3 ...
Мое решение пока работает, но не правильно. У меня есть регулярное выражение
\b([0-9]+)\b
, которое получает любое число, окруженное пробелом с обеих сторон, но сначала оно получает все вхождения, а не первое, что жизненно важно для моих требований. Во-вторых, он не обрабатывает число с буквой на одной стороне, поэтому, например, игнорируется 12a.
Пример кода ...
$subject="A 2nd test, Apartment 3, Building 1232, Random Street, RH12 4SZ";
echo "Text to find number in: $subject<BR>";
if (preg_match('\b([0-9]+)\b', $subject, $matches)) {
echo "match, found number: ".implode(",",$matches);
}else{
echo "no match";
}
Может кто-нибудь улучшить то, что яесть?