3
所以我有一个字符串,我正在变成一个数组,但我想用正则表达式分隔每个单词。我使用下面的函数匹配整个单词。正则表达式作为分隔符爆炸()
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
因为它包含withing字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。
像这样的东西? 'preg_split('(。+?)',$ haystack);' –
@JessieStalk - 不完全。您传递给'preg_split'的正则表达式是字符串* split * on的模式,而不是您想要*保留*的字符串。如果你试图在输入中保留单词,你应该分割非单词字符:'preg_split('/ \ W + /',$ haystack)' –
感谢您的时间和精力:) –