2011-12-28 8 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を使用しよう:あなたは、明示的にuse宣言を使用してこれを実行する必要があります。 – Kristian

+0

アップス、ちょうどそれを得た。可変スコープのためです。回答として投稿 – Kristian

答えて

2

これはvariable scopeの動作の問題ではありません。その関数から変数$ matchにアクセスすることはできません。

解決策はグローバルを使用することです。彼らはどこからでもアクセスできます。自動的に囲みスコープから変数を捕捉しない

+0

非常にクリスチャンありがとうございます。申し訳ありませんが痛みですが、Amadanは、in_arrayを使用する新しい単語を追加するためのより良いオプションを指摘しました。私はこれを試しましたが、うまく動作しませんでした。私がここで間違っていることを指摘してください:$ forbiddenWordsArray = array( "a"、 "an"、 "the"、 "this"、 "at"、 "in"、 "or"、 "of" for "、" to "、" its "、" as "、" by ")を含むが、これらに限定されない。 $ filteredArray = array_filter($ wordArray、function($ x){ return \t \t!in_array($ x、$ forbiddenWordsArray); }); – Duplexia

+0

NVM!それは同じ可変スコープの問題でした。 – Duplexia

+0

'$ forbiddenWordsArray'のすべてのインスタンスを' $ $ '' 'forbiddenWordsArray'] 'に置き換えてください。 あなたはお尻に苦しむでしょう、そして、ここにはいません:) NP – Kristian

2

なぜ正規表現ですか?なぜ!in_array($x, $forbiddenWordsArray)?このように、要素を動的に管理する方が簡単です。

2

無名関数を動作するはず

$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); 
}); 

。ソリューション場合

$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); 
           });