2011-12-28 25 views
0

我嘗試了preg_match的其他正則表達式問題的建議解決方案,但無濟於事。使用preg_match的正則表達式模式變量

$match = '/^(.|a|an|and|the|this|at|in|or|of|is|for|to|its|as|by)\$/'; 
$filteredArray = array_filter($wordArray, function($x){ 
return !preg_match($match,$x); 
}); 

它適用於我包含字符串文字但我想使用一個變量,所以我可以添加更多的單詞。此版本的作品:

$filteredArray = array_filter($wordArray, function($x){ 
return !preg_match("/^(.|a|an|and|the|this|at|in|or|of|is|for|to|its|as|by)$/",$x); 
}); 

我感謝任何幫助!

+0

不知道,如果解決方案,但儘量使用雙quoutes作爲工作示例。 – Kristian 2011-12-28 21:03:26

+0

Ups,剛剛得到它。這是因爲變量的範圍。作爲回答發帖 – Kristian 2011-12-28 21:04:07

回答

2

這並不適用於variable scope。你不能從該函數訪問變量$ match。

解決方案使用全局變量。他們可以從任何地方訪問。

$GLOBALS['word_regex'] = '/^(.|a|an|and|the|this|at|in|or|of|is|for|to|its|as|by)\$/'; 
$filteredArray = array_filter($wordArray, function($x){ 
return !preg_match($GLOBALS['word_regex'],$x); 
}); 

這應該工作

+0

非常感謝克里斯蒂安。抱歉是一種痛苦,但是Amadan指出了一個更好的選擇來添加可以使用in_array的新單詞。我嘗試過,但沒有得到它的工作。請指出我在這裏做錯了什麼:$ forbiddenWordsArray = array(「a」,「an」,「the」,「this」,「at」,「in」,「or」,「of」 「是」, 「對」, 「到」, 「它的」, 「如」, 「通過」); $ filteredArray = array_filter($ wordArray,function($ x){ return \t \t!in_array($ x,$ forbiddenWordsArray); }); – Duplexia 2011-12-28 21:13:35

+0

NVM!這是相同的變量範圍問題。 – Duplexia 2011-12-28 21:16:08

+0

用'$ GLOBALS ['$ forbiddenWordsArray']'替換'$ forbiddenWordsArray'的所有實例,你應該完成:) 而你會在屁股疼痛,然後ei不會在這裏:) NP – Kristian 2011-12-28 21:18:19

2

爲什麼是正則表達式?爲什麼不是!in_array($x, $forbiddenWordsArray)?這樣,更容易動態管理元素。

2

匿名函數不會自動從封閉的範圍捕捉變量。你需要明確地做到這一點使用一個use聲明:

$shortWords = '/^(.|a|an|and|the|this|at|in|or|of|is|for|to|its|as|by)\$/'; 
$filteredArray = array_filter($wordArray, 
           function($x) use ($shortWords) { 
            return !preg_match($shortWords,$x); 
           });