2011-07-03 53 views
1

我有以下功能,我希望它在单个单词中只剥去“alpha” 而不是复合单词的一部分,例如“阿尔法狗”。现在,我只是看到“狗”,并不好。任何帮助?仅当单个单词时剥去一个单词,而不是复合单词的一部分

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; 

} 

编辑:您好,我有一个问题...我上面用功能的新版本编辑:它去除的话,调整的空格,然后做别的东西,我需要的,但它不删除破折号(或减号)...出了什么问题?我试过的东西,但无济于事...感谢

+1

你的代码最初发布了一些我见过的最丑陋的。花点时间让它变得可读,你将有更好的机会获得答案。 –

+0

对不起,但这不是我的错误......或者不完全。我不知道为什么,当我把代码放在行上时,底部的代码开箱即可... – smepie

+0

了解,它足以突出显示文本并单击代码括号图标... – smepie

回答

0

此:

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

应该是这样的:

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

没关系,谢谢你;-) – smepie

+0

嗨伊万,请看看新的上面的代码,并告诉我什么是错的... – smepie

+0

你应该为一个新问题创建一个新问题。摆脱'\ s *' - 原本它不在那里。其他人可能不明白为什么这些新答案存在这些答案,因为新问题已经包含了这些答案。人们倾向于在没有任何答案的情况下看新问题,所以如果你这样做,你也不会得到尽可能多的人帮助你。 – evan

4

使用这个正则表达式模式

/\balpha\b/

\b代表“单词边界”,这意味着它会通过不同的字匹配(如果这个词包围通过单词分隔符)。

希望这有助于

+0

这是...如何输入那个例子?如果我写'$ words = array('/ \ balpha \ b /','beta','gamma','delta');'alpha不会被去掉... – smepie

+0

我总是需要这个数组,但对于一些我需要剥离的字样,如看到的...例如“的”,而不是“关闭”,仍然是f ... – smepie

+0

我投你的答案'原因是有用的 – smepie

相关问题