Использование шаблонной переменной regex с preg_match - PullRequest
0 голосов
/ 29 декабря 2011

Я пытался предложить решения из других вопросов регулярных выражений с 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);
});

Я ценю любую помощь!

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

Это не работает из-за переменной 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 голосов
/ 29 декабря 2011

Анонимные функции не могут автоматически захватывать переменные из окружающей области.Вам нужно явно сделать это, используя объявление 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);
                              });
2 голосов
/ 29 декабря 2011

Почему регулярное выражение? Почему не !in_array($x, $forbiddenWordsArray)? Таким образом, проще динамически управлять элементами.

...