2015-08-21 3 views
0

Я видел код какПонимание того, как функция preg_replace работает

<?php 
$str = 'foo 112'; 
$str = preg_replace('/[0-9]+/', '2000', $str); 
// This will be 'foo o' now 
echo $str; 
?> 

выход приходит как foo 2000. Я смущен, так как я знал, что [0-9] + проверяет количество в диапазоне и один или несколько. Если он не производит o/p, как 200020002000?

+3

нет, поскольку он соответствует всем цифрам за один раз. '+' означает «один или несколько». regexes по-прежнему жадные. –

+1

Коэффициент '+' соответствует произвольной длине, заданной charclass. Таким образом, он разрывает все цифры. – mario

ответ

2

«+» в [0-9] + заставит его искать строку чисел (только с одним числом, являющимся строкой) и заменить их на «2000».

Это выражение будет работать следующим образом:

(...,$str) 

^Посмотрите на $ ул

'foo 112' 

(..[0-9]..) 

^Поиск по номеру

'...1..' //Found one (literally) 

(...]+..) 

^Проверить следующие индексы, чтобы увидеть, если матч что вы только что искали

'...11..' //Still a number 
'...112' //Still a number 

Подробнее? Nope
Что у вас получилось? '112'

(..., '2000',..) 

^Заменить то, что вы получили с '2000'

Result: 'foo 2000' 

* Если бы это было просто [0-9] он будет работать, как вы ожидаете.

1

'/[0-9]+/ будет соответствовать всем числовым значениям в то же время, + означает одно или более вхождения, а затем, 2000 означает замену, что '/[0-9]+/ сочетается с 2000.