Как регуляркой заменить слово, содержащее букву?

ilyaplot

Решил увеличить релевантность поиска. Есть поисковый запрос "елка" и "ёлка". Результатов поиска тоже два. Хотелось бы показывать оба результата поиска по обоим запросам.

Единственное, на что у меня хватило знаний - это заменить елка на ё|елка, но мне нужно получить ёлка|елка. Для этой задачи мне нужно с помощью регулярки выбрать слово целиком, в котором содержится буква ё.

$query = preg_replace("/(ё|е)/isu" ,"ё|е", $query);
// получаю ё|елка

Подскажите, как выбрать слово целиком?

2 ответа

ilyaplot

Предположу, что можно так:

$query = preg_replace("/(\w*)[ёе](\w*)/isu" ,"$1ё$2|$1е$2", $query);


ilyaplot

Написал вот такой код для преобразований:

$query = preg_replace_callback("/(\w+)/isu" , function($word) {
    $word = end($word);
    if (preg_match("/(е|ё)/isu", $word)) {
        return preg_replace("/е/isu", "ё", $word) . '|' . preg_replace("/ё/isu", "е", $word);
    }
    return $word;
}, $query);

На входе имеем строку елка тест поиск на выходе ёлка|елка тёст|тест поиск Если в ответах будет предложено решение с одной регуляркой, с удовольствием отмечу как ответ

licensed under cc by-sa 3.0 with attribution.