лишить слова, когда оно является единственным словом, а не частью составного слова - PullRequest
1 голос
/ 04 июля 2011

У меня есть следующая функция, я хочу, чтобы она убирала "альфа", когда только одно слово а не часть составного слова, такого как "альфадог". Теперь вместо этого я просто вижу «собаку», и это не хорошо. Любая помощь?

    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;

}

edit: привет, у меня есть еще одна проблема ... я редактировал выше с новой версией функции: она убирает слова, корректирует пробелы, а затем делает что-то еще, что мне нужно, но не удаляет тире (или минус) ... что не так? я пробовал что-то, но безрезультатно ... спасибо

Ответы [ 2 ]

4 голосов
/ 04 июля 2011

Используйте этот шаблон регулярных выражений

/\balpha\b/

\b означает «граница слова», это означает, что оно будет соответствовать слову по отдельности (если слово окружено разделителями слов).

Надеюсь, это поможет

0 голосов
/ 04 июля 2011

Это:

$pattern = '#' . join('|', $words) . '#iS';

Должно быть так:

$pattern = '#\b' . join('\b|\b', $words) . '\b#iS';
...