preg_replace_callback() поиск совпадений

K
На сайте с 28.12.2008
Offline
61
kud
468

<?php

$text = 'Съешь ещё этих мягких французских булок';
$patterns[] = "{(\w+\s\w+\s\w+\b)}Usmi";
preg_replace_callback($patterns,"func",$text);
function func($matches) {
echo "<pre>";
print_r($matches);
echo "</pre>";
}
?>

Как мне в $matches получить все совпадения по три слова в тексте?

Что-бы было

1) Съешь ещё этих

2)​​ ещё этих мягких

3) этих мягких французских

4)​​ мягких французских булок

Сейчас находит только

1) Съешь ещё этих

2) мягких французских булок

siv1987
На сайте с 02.04.2009
Offline
427
#1

А причем тут коллбэк? Как составили регулярное выражение так и находит.

"Что-бы было" работаете с массивом. Для regexp тут по моему нужна рекурсия, и то непонятно зачем.

K
На сайте с 28.12.2008
Offline
61
kud
#2

callback при том что в функция func приблизительно на 40 строк кода и совпадения ,возможно, нужно будет заменить другими словами.

Есть у меня уже вариант с таким выражением:


$patterns[] = "{(\w+\s+(?=(\w+\s)(?=(\w+\b))))}si";

Но при возвращении из func в $text меняется только первое слово из массива $matches.

siv1987
На сайте с 02.04.2009
Offline
427
#3

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий