премахване на дума, когато е само една дума, а не част от съставна дума

Имам следната функция, искам тя да премахне "alpha", когато е само една дума, а не част от съставна дума като "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;

}

редактиране: здравей, имам друг проблем... редактирах по-горе с новата версия на функцията: премахва думите, коригира белите интервали и след това прави нещо друго, което ми трябва, но не премахва тирета (или минус). .. какво не е наред? опитах нещо, но без успех...благодаря


person smepie    schedule 03.07.2011    source източник
comment
Първоначално публикуваният ви код беше един от най-грозните, които съм виждал. Отделете време, за да го направите четим и ще имате по-добър шанс да получите отговори.   -  person Brad Mace    schedule 04.07.2011
comment
съжалявам, но грешката не е моя...или не напълно. Не знам защо, когато сложа код на редове, долният код излиза от кутията...   -  person smepie    schedule 04.07.2011
comment
разбрано, достатъчно е да маркирате текста и да кликнете върху иконата с кодови скоби...   -  person smepie    schedule 05.07.2011


Отговори (2)


Това:

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

Трябва да е това:

$pattern = '#\b' . join('\b|\b', $words) . '\b#iS';
person evan    schedule 04.07.2011
comment
Трябва да създадете нов въпрос за нов проблем. Отървете се от \s* - първоначално го нямаше. Други хора може да не разберат защо съществуват тези отговори за новия въпрос, тъй като новият въпрос съдържа тези отговори. Хората са склонни да разглеждат нови въпроси без никакви отговори, така че няма да получите толкова много хора, които да ви помогнат, ако направите това. - person evan; 05.07.2011

Използвайте този модел на регулярен израз

/\balpha\b/

\b означава „граница на думата“, това означава, че ще съответства на думата чрез разделяне (ако думата е заобиколена от разделители на думи).

Надявам се това да помогне

person Edgar Villegas Alvarado    schedule 03.07.2011
comment
това е... как да се въведе в този пример? ако напиша $words = array('/\balpha\b/', 'beta', 'gamma', 'delta'); алфа не се премахва... - person smepie; 04.07.2011
comment
винаги имам нужда от масива, но за някои думи трябва да премахна, както се вижда... например от, а не изключено, което остава само f... - person smepie; 04.07.2011