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

时间:2011-10-20 15:22:18

标签: regex

我有一个数组,想要只检索5个字母的单词,不再是,我试图使用

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

但是这导致任何至少5个字母的单词。我想要任何最多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

请参阅:http://www.regular-expressions.info/wordboundaries.html