Php explode()中作为分隔符的正则表达式

Php explode()中作为分隔符的正则表达式,php,arrays,regex,explode,Php,Arrays,Regex,Explode,所以我有一个字符串,我把它转换成一个数组,但是我想用正则表达式来分隔每个单词。我正在使用下面的函数匹配整个单词 function substr_count_array($haystack, $needle) { $initial = 0; $bits = explode(' ', $haystack); foreach ($needle as $substring) { if (!in_array($substring, $bits))

所以我有一个字符串,我把它转换成一个数组,但是我想用正则表达式来分隔每个单词。我正在使用下面的函数匹配整个单词

function substr_count_array($haystack, $needle)
{
     $initial = 0;
     $bits = explode(' ', $haystack);

     foreach ($needle as $substring) 
     {
        if (!in_array($substring, $bits))
        {
            continue;
        }

        $initial += substr_count($haystack, $substring);
     }

     return $initial;
}
问题是它与字符串
animal
匹配,但与
animals
不匹配。如果我做这样的部分匹配:

function substr_count_array2($haystack, $needle)
{
     $initial = 0;

     foreach ($needle as $substring) 
     {
          $initial += substr_count($haystack, $substring);
     }

     return $initial;
}
它还匹配,比如说,
a
,因为它包含在单词
animals
中,并返回
2
。如何使用正则表达式作为分隔符来匹配每个长度为5-7个字符的字符串

解释更简单:

$animals = array('cat','dog','bird');
$toString = implode(' ', $animals);
$data = array('a');

echo substr_count_array($toString, $data);

如果我搜索一个字符,例如
a
,它将通过检查并验证为合法值,因为
a
包含在第一个元素中。但是,如果我匹配由空格分隔的整个单词,如果它们没有被空格分隔,它就会忽略它们。因此,我需要在要匹配的字符串之后使用一个正则表达式来匹配任何

简单地说,您需要使用而不是
explode

explode
将基于常量值进行拆分时,
preg_split
将基于正则表达式进行拆分


在您的情况下,最好在非单词字符上拆分
\W+
,然后手动筛选结果的长度。

类似这样的内容<代码>预分割(“(.+?)”,$haystack)@JessieStalk-不完全是。传递给
preg_split
的正则表达式是字符串拆分的模式,而不是要保留的字符串。如果您试图在输入中保留单词,则应使用非单词字符进行拆分:
preg_split('/\W+/',$haystack)
感谢您的时间和努力:)