Подскажите как заставить работать код?
if (preg_match("/\bпривет (мир)\b/iu", "привет (мир)")) {
return true;
} else {
return false;
}
preg_quote не помогает.
Значение границы слова зависит от контекста. Если \b
стоит после скобки, которая не является "словным" символом (буква, цифра или знак подчёркивания), она требует "словный" символ после скобки. Так как в указанной строке после скобки конец строки, совпадения нет.
Используйте контекстонезависимые границы слова (?<!\w)
и (?!\w)
:
$word = "привет (мир)";
return(preg_match("/(?<!\w)" . preg_quote($word, "/") . "(?!\w)/iu", "привет (мир)"));
Шаблон (?<!\w)
— блок предварительного просмотра назад, который находит позицию в строке, сразу перед которой нет "словного" символа, а (?!\w)
— блок предварительного просмотра вперёд, который находит позицию в строке, сразу после которой нет "словного" символа.
Если под границей слова понимать пробельные символы, замените (?<!\w)
и (?!\w)
на (?<!\S)
и (?!\S)
.
preg_quote($word, "/")
необходим для правильного экранирования символов, которые является специальными символами регулярных выражений, такие как ?
, +
, (
, )
, [
и другие.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Собственно говоря есть категория юзеров $participants, которые состоят в группах и нет, у групп есть время начала $start_time и конца $end_time , нужно вывести...
Иногда скрипт падает при дебаге, когда остановится на брейкпоинте по таймаутуГрешу на FcgidIOTimeout, так как по умолчанию у него 40 секунд и в логах...