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

Posted

技术标签:

【中文标题】正则表达式作为explode()中的分隔符【英文标题】:Regular expression as delimiter in explode() 【发布时间】:2014-09-09 21:11:16 【问题描述】:

所以我有一个字符串,我将其转换为一个数组,但我想使用正则表达式分隔每个单词。我正在使用以下函数匹配整个单词。

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】:

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

explode 将根据常量值进行拆分,preg_split 将根据正则表达式进行拆分。

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

【讨论】:

这样的? preg_split('(.+?)', $haystack); @JessieStalk - 不完全是。您传递给preg_split 的正则表达式是字符串split 所在的模式,而不是您想要保留 的字符串。如果您想保留输入中的单词,您应该拆分非单词字符:preg_split('/\W+/', $haystack) 感谢您的时间和精力 :)

以上是关于正则表达式作为explode()中的分隔符的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式作为标记器 - 以分隔符开头的字符串

scanf中的正则表达式?

1 到 150 之间的有效字符串的正则表达式,以逗号和连字符分隔

初步学习正则表达式

使用批处理脚本,如何使用正则表达式拆分 .csv 文件中的数据?

简单的js正则表达式问题