我有一个数组,想要只检索5个字母的单词,不再是,我试图使用
$new = preg_grep("/.{5}/", $array);
但是这导致任何至少5个字母的单词。我想要任何最多5个字母的单词。
答案 0 :(得分:5)
您需要使用start(^)和end($)修饰符,所以
$new = preg_grep("/^.{5}$/", $array);
但是,更有效的方法可能只是基于strlen
的过滤器:
function len5($v){
return strlen($v) == 5;
}
$new = array_filter($array, 'len5');
答案 1 :(得分:2)
使用下面的正则表达式匹配1到5个字符的单词。 \b
是一个单词边界
/\b\w{1,5}\b/
答案 2 :(得分:0)
你的问题不明确。您想要仅 5个字母长的单词,或最多 5个字母长的单词。这是两件事。
对于前者:
$new = preg_grep("/^.{5}$/", $array);
对于后者:
$new = preg_grep("/^.{1,5}$/", $array);
^
和$
锚分别标记行的开头和结尾。如果您没有标记,则会匹配abcdef
之类的字词,因为abcde
会与您的正则表达式匹配。您希望指定要匹配整个字符串而不仅仅是字符串的一部分。
答案 3 :(得分:0)
添加开始(^
)和结束($
)标记:
$new = preg_grep("/^.{5}$/", $array);
答案 4 :(得分:0)
这也将在一个单词的中间匹配。您需要单词边界切换我认为它是\w