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

时间:2014-07-18 16:36:25

标签: php arrays regex explode

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

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 匹配字符串的正则表达式进行分隔。

1 个答案:

答案 0 :(得分:9)

简而言之,您需要使用preg_split代替explode

虽然explode将在常量值上拆分,但preg_split将根据正则表达式进行拆分。

在您的情况下,最好分割非单词字符\W+,然后手动过滤结果的长度。