У меня есть следующая функция, я хочу, чтобы она полосала «альфа», когда только одно слово, а не часть составного слова типа «alphadog». Теперь вместо этого я просто вижу «собаку», и это не хорошо. Любая помощь?
function stripwords($string) { // build pattern once static $pattern = null; if ($pattern === null) { // pull words to remove from somewhere $words = array('alpha', 'beta', '-'); // escape special characters foreach ($words as &$word) { $word = preg_quote($word, '#'); } // combine to regex $pattern = '#\b(' . join('|', $words) . ')\b\s*#iS'; } $print = preg_replace($pattern, '', $string); list($firstpart)=explode('+', $print); return $firstpart; }
: hi, у меня есть еще одна проблема … я отредактировал выше с новой версией функции: он разбивает слова, настраивает пробелы, а затем делает что-то еще, что мне нужно, но не удаляет тире (или минус). .. что не так? я пробовал что-то, но не помогло … спасибо
Эта:
$pattern = '#' . join('|', $words) . '#iS';
Должно быть:
$pattern = '#\b' . join('\b|\b', $words) . '\b#iS';
Используйте этот шаблон регулярного выражения
/\balpha\b/
\b
означает «граница слова», это означает, что он будет соответствовать слову по отдельности (если слово окружено разделителями слов).
Надеюсь это поможет