正则表达式作为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()中的分隔符的主要内容,如果未能解决你的问题,请参考以下文章
1 到 150 之间的有效字符串的正则表达式,以逗号和连字符分隔