PHP在保留分隔符的情况下展开字符串


PHP exploding a string while keeping delimiters

在我的项目中,我需要分析不同的句子,并通过确定它们是否以问号结尾来确定哪些是问题。

所以我尝试使用爆炸,但它不支持多个分隔符。我暂时把所有的标点符号都换成了chr(1),这样我就可以把所有的句子都炸开,不管它们以(结束)什么。, !, ?,等等)。

然后我需要找到每个句子的最后一个字母,然而爆炸函数已经删除了所有的标点符号,所以我需要某种方法把它放回那里。

我花了很长时间才解决这个问题,但最终我把它破解了。我把我的解决方案贴在这里,以便其他人可以使用。
$array = preg_split('~([.!?:;])~u',$raw , null, PREG_SPLIT_DELIM_CAPTURE);

这是我的函数,multipleExplodeKeepDelimiters。下面是如何使用它的一个例子,通过将一个字符串展开成不同的句子,看看最后一个字符是否是问号:

function multipleExplodeKeepDelimiters($delimiters, $string) {
    $initialArray = explode(chr(1), str_replace($delimiters, chr(1), $string));
    $finalArray = array();
    foreach($initialArray as $item) {
        if(strlen($item) > 0) array_push($finalArray, $item . $string[strpos($string, $item) + strlen($item)]);
    }
    return $finalArray;
}
$punctuation = array(".", ";", ":", "?", "!");
$string = "I am not a question. How was your day? Thank you, very nice. Why are you asking?";
$sentences = multipleExplodeKeepDelimiters($punctuation, $string);
foreach($sentences as $question) {
    if($question[strlen($question)-1] == "?") {
        print("'" . $question . "' is a question<br />");
    }
}