Regex 正则表达式只匹配5个字母单词

Regex 正则表达式只匹配5个字母单词,regex,Regex,我有一个数组,只想检索5个字母的单词,不再检索,我已经尝试使用了 $new = preg_grep("/.{5}/", $array); 但这导致了任何一个单词至少有5个字母长。我想要任何长度不超过5个字母的单词。你的问题不清楚。你想要只有5个字母长的单词,还是最多5个字母长的单词。这是两件不同的事情 对于前者: $new = preg_grep("/^.{5}$/", $array); 对于后者: $new = preg_grep("/^.{1,5}$/", $array); ^和$锚分

我有一个数组,只想检索5个字母的单词,不再检索,我已经尝试使用了

$new = preg_grep("/.{5}/", $array);

但这导致了任何一个单词至少有5个字母长。我想要任何长度不超过5个字母的单词。

你的问题不清楚。你想要只有5个字母长的单词,还是最多5个字母长的单词。这是两件不同的事情

对于前者:

$new = preg_grep("/^.{5}$/", $array);
对于后者:

$new = preg_grep("/^.{1,5}$/", $array);
^
$
锚分别标记行的开始和结束。如果没有标记,您将匹配类似
abcdef
的单词,因为
abcde
将与正则表达式匹配。您需要指定要匹配整个字符串,而不仅仅是字符串的一部分。

添加开始(
^
)和结束(
$
)标记:


这也会在一个单词的中间匹配。你需要单词边界开关我想它是
\w

请参见:

您需要使用start(^)和end($)修饰符,因此

$new = preg_grep("/^.{5}$/", $array);
但是,更有效的方法可能是只执行基于
strlen
的过滤器:

function len5($v){
   return strlen($v) == 5;
}
$new = array_filter($array, 'len5');

使用下面的正则表达式匹配1到5个字符的单词<代码>\b是一个单词边界

/\b\w{1,5}\b/
/\b\w{1,5}\b/