2013-03-04 2 views
0

Я пытаюсь извлечь целое число 1425 из строки $123/123 - 1425ft² - Some random message. Однако я могу извлечь только 5, а не 1425 с кодом ниже.PHP Regex в соответствии с номером

Будучи плохим при регулярном выражении, я использовал * для соответствия нескольким цифрам.

Любые предложения, что пошло не так? Спасибо!

PHP

$text = '$123/123 - 1425ft² - Some random message'; 
$pattern = '/ ([0-9])*ft²/s'; 
preg_match($pattern, $text, $matches); 

echo '<pre>'; 
print_r($matches); 

Выход

Array 
(
    [0] => 1425ft² 
    [1] => 5 
) 
+0

Переместить группу захвата, чтобы захватить все цифры: ' '/ ([0-9] +) ft²/s'' – nhahtdh

+0

Вы должны переместить звезду * внутри * скобки, так что группа захвата '()' содержит все цифры, которые были сопоставлены. – Jon

+0

@nhahtdh Это работает! – Nyxynyx

ответ

5

Незначительные изменения в свой шаблон

$pattern = '/ ([0-9]*)ft²/';

или если там должно быть по меньшей мере, один номер соответствует

$pattern = '/ ([0-9]+)ft²/';

+0

Модификатор '/ s' здесь бесполезен. –

+0

согласен и удален, он был от исходного шаблона –

0
$text = '$123/123 - 1425ft² - Some random message'; 
$pattern = '/([0-9]+)ft²/s'; 
preg_match($pattern, $text, $matches); 

echo '<pre>'; 
print_r($matches); 

Используйте приведенный выше код. Я проверил это. Его работа прекрасна.

+1

'([0-9] +) *': 2 слоя повторения = плохие вещи. – nhahtdh

+0

Но его работа прекрасна. –

+1

Я не знаю, для чего используется регулярное выражение, но я могу сделать, что это регулярное выражение работает в отступающем аду и попадает в предел возврата. – nhahtdh

0

Попробуйте это:

$text = '$123/123 - 1425ft² - Some random message'; 
$pattern = '/(?P<number>\d+)ft²/'; 
preg_match($pattern, $text, $matches); 

echo $matches['number']; 
+0

Это немного отличается от регулярного выражения OP. Регулярное выражение OP исключает случай, когда совпадение находится в начале строки и фиксирует пробел перед цифрами. Ваш позволит совпадение в начале строки, но также позволяет совпадение, если перед номерами есть другие символы. – nhahtdh

+0

Он будет соответствовать любому числу до ft², это то, о чем попросил ОП. –

+0

Я описываю только разницу. Будь то то, что ОП просит или нет, зависит от ОП. – nhahtdh

Смежные вопросы