注意:我最近问了这个问题,但事实证明我正在寻找的解决方案比我最初的想法更先进。
使用preg_split,我该如何拆分它,请注意分隔符之前的字符串各不相同:
$string = "big red apple one purple grape some stuff then green apple yatta yatta red cherry green gape";
我想使用字符串数组作为分隔符,我希望它们包含在结果中。 Deliminters:[苹果,葡萄,樱桃]
我想要的输出是:
Array("big red apple", "one purple grape", "some stuff then green apple", "yatta yatta red cherry", "green grape");
这是我原来的:
$string = "big red apple one purple grape some stuff then green apple yatta yatta red cherry green gape";
$matches = preg_split('(apple|grape|cherry)', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($matches);
打印出来: 数组([0] =>大红[1] =>一个紫色[2] =>一些东西然后绿色[3] => yatta yatta red [4] =>绿色gape)
没有分隔符。
答案 0 :(得分:3)
如果你修改了输入字符串中最后一个单词的拼写错误,那么(一种可能的)模式是:
~(?<=apple|grape|cherry)\s*~
这是使用a look-behind然后拆分以下空格(如果存在)。所以它也适用于字符串的结尾。
完整示例:
<?php
/**
* preg_split using PREG_SPLIT_DELIM_CAPTURE with an array of delims
* @link http://stackoverflow.com/a/16304338/2261774
*/
$string = "big red apple one purple grape some stuff then green apple yatta yatta red cherry green grape";
var_dump(
preg_split("~(?<=apple|grape|cherry)\s*~", $string, -1, PREG_SPLIT_NO_EMPTY)
);
正如您所看到的,我在这里没有使用PREG_SPLIT_DELIM_CAPTURE
,因为我想要删除我拆分的空格。而是使用PREG_SPLIT_NO_EMPTY
标志,以便我不会在字符串的末尾得到(空)分割。
答案 1 :(得分:0)
有点简单,结果相同:
$string = "big red apple one purple grape some stuff then green apple yatta yatta red cherry green grape";
$re='/\S.*?\s(?:apple|grape|cherry)/';
preg_match_all($re,$string,$m);
var_dump($m[0]);