PHP在保持分隔符的同时爆炸字符串

时间:2013-05-25 11:41:09

标签: php string explode delimiter

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

所以我尝试使用explode,但它不支持多个分隔符。我暂时将所有标点符号替换为chr(1),以便我可以爆炸所有句子,无论它们以什么结束(。,!,?等等)。

然后我需要找到每个句子的最后一个字母,但是爆炸功能已经删除了所有的标点符号,所以我需要一些方法将它放回去。

我花了很长时间才解决问题,但最终我解决了这个问题。我在这里发布我的解决方案,以便其他人可以使用它。

2 个答案:

答案 0 :(得分:8)

$array = preg_split('~([.!?:;])~u',$raw , null, PREG_SPLIT_DELIM_CAPTURE);

答案 1 :(得分:6)

这是我的函数,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? Sex On Hard Concrete Always Hurts The Orgasmic Area. Why does custard taste so lumpy when you use breast milk?";

$sentences = multipleExplodeKeepDelimiters($punctuation, $string);
foreach($sentences as $question) {
    if($question[strlen($question)-1] == "?") {
        print("'" . $question . "' is a question<br />");
    }
}