В PHP я хотел бы иметь возможность ограничить количество символов вокруг слова, которое я пытаюсь сопоставить. Скажем:
$content
содержит полный текст$look_for
содержит строку, которую я хочу найти в этом полном текстеЯ хочу, чтобы это было независимым от языка, включая такие языки, как китайский, в которых нет разделителей пробелов. Полный текст будет utf8. Я пробовал следующий код:
preg_match("/(.*){0,10}$look_for(.*){0,10}/i", $content, $matches);
При этом $matches
пуст. Разве {0,10}
не должен ограничивать символы вокруг предполагаемого слова?
Это не имеет значения. Вопрос был ясен, и уже предоставленный ответ был очень полезным. Не уверен, за что ваш отрицательный голос и т. д., Но хорошего дня.
(.*){0,10}
— это то, что известно как «катастрофический возврат», вместо этого используйте (.{10})
.
<?php
$content = 'aaaaaaaabbbbbbbbcccccccc the quick brown fox jumps over the lazy dog xxxxxxxxyyyyyyyyzzzzzzzz';
$look_for = 'the quick brown fox jumps over the lazy dog';
$regex = '/(.{10})' . $look_for . '(.{10})/i';
$matches = [];
preg_match($regex, $content, $matches);
var_dump($matches);
Результат:
array(3) {
[0]=>
string(63) "bcccccccc the quick brown fox jumps over the lazy dog xxxxxxxxy"
[1]=>
string(10) "bcccccccc "
[2]=>
string(10) " xxxxxxxxy"
}
Идеальный. Таким образом, фигурные скобки должны были быть внутри круглыми скобками! Очень признателен.
@KhomNazid Что, если $look_for
находится внутри одного из .{10}
? Вы можете пропустить действительные совпадения, если они будут найдены там.
Не мой вариант использования, но спасибо за заботу.
Что в
contents
и что вlook_for
?