2011-07-03 86 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

相關問題