我尝试使用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 :(得分:2)
为何选择regexp?为什么不!in_array($x, $forbiddenWordsArray)
?这样,更容易动态管理元素。
答案 1 :(得分: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);
});
那应该有用
答案 2 :(得分: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);
});