0

注意:我最近问了这个问题,但事实证明我正在寻找的解决方案比我最初想象的要先进。

使用 preg_split,我将如何拆分它,请注意分隔符之前的字符串会有所不同:

$string = "big red apple one purple grape some stuff then green apple yatta yatta red cherry green gape";

我想使用一个字符串数组作为分隔符,我希望它们包含在结果中。分隔符:[苹果、葡萄、樱桃]

我想要的输出是:

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] => green gape)

没有分隔符。

4

2 回答 2

3

如果您修复了输入字符串中最后一个单词的拼写错误,那么(一种可能的)模式是:

~(?<=apple|grape|cherry)\s*~

这是使用后视,然后拆分以下空格(如果存在)。所以它也适用于字符串的末尾。

完整示例:

<?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使用了标志,这样我就不会在字符串末尾得到(空)拆分。

于 2013-04-30T16:07:53.120 回答
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]);
于 2017-08-22T04:52:50.123 回答