我有一个字符串,想将其转换为数组,但是我想使用正则表达式来分隔每个单词。我使用下面的函数匹配整个单词。
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
包含在第一个元素中。但是,如果我匹配以空格分隔的整个单词,它会忽略它们,如果它们没有被空格分隔。因此,我需要用正则表达式分隔与要匹配的字符串之后的任何内容。
preg_split('(.+?)', $haystack);
- Jessie Stalkpreg_split
的正则表达式是字符串被分割的模式,而不是你想要保留的字符串。如果你想要保留输入中的单词,你应该在非单词字符上进行分割:preg_split('/\W+/', $haystack)
。 - Mr. Llama