所以我有一个字符串,我正在变成一个数组,但我想用正则表达式分隔每个单词。我使用下面的函数匹配整个单词。
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
。我如何explode()
使用正则表达式作为分隔符,以便我可以匹配每个长度为5-7个字符的字符串?
解释更简单:
$animals = array('cat','dog','bird');
$toString = implode(' ', $animals);
$data = array('a');
echo substr_count_array($toString, $data);
如果我搜索a
这样的字符,它会通过检查并验证为合法值,因为a
包含在第一个元素中。但是,如果我将一个空格爆炸的整个单词匹配,如果它们没有被空格分隔,则会省略它们。因此,我需要使用匹配任何 AFTER 匹配字符串的正则表达式进行分隔。
答案 0 :(得分:9)
简而言之,您需要使用preg_split
代替explode
。
虽然explode
将在常量值上拆分,但preg_split
将根据正则表达式进行拆分。
在您的情况下,最好分割非单词字符\W+
,然后手动过滤结果的长度。