對於我的項目,我需要分析不同的句子,並通過確定它們是否以問號結束來確定哪些是問題。PHP爆炸字符串,同時保留分隔符
所以我嘗試使用爆炸,但它不支持多個分隔符。我暫時將所有標點符號替換爲chr(1),以便我可以爆炸所有句子,而不管它們以(。,!,?等等)結尾。
然後我需要找到每個句子的最後一個字母,但爆炸函數已經刪除了所有的標點符號,所以我需要一些方法將它放回原處。
我花了很長時間才解決問題,但最終我破解了它。我在這裏發佈我的解決方案,以便其他人可以使用它。
對於我的項目,我需要分析不同的句子,並通過確定它們是否以問號結束來確定哪些是問題。PHP爆炸字符串,同時保留分隔符
所以我嘗試使用爆炸,但它不支持多個分隔符。我暫時將所有標點符號替換爲chr(1),以便我可以爆炸所有句子,而不管它們以(。,!,?等等)結尾。
然後我需要找到每個句子的最後一個字母,但爆炸函數已經刪除了所有的標點符號,所以我需要一些方法將它放回原處。
我花了很長時間才解決問題,但最終我破解了它。我在這裏發佈我的解決方案,以便其他人可以使用它。
這裏是我的函數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 />");
}
}
$array = preg_split('~([.!?:;])~u',$raw , null, PREG_SPLIT_DELIM_CAPTURE);
Eww,正則表達式很混亂。 – CHRIS
乾淨得多,比接受的答案還快。 –
我必須說,這已經是最奇怪的例子字符串我見過。 –
記得我見過的SOH CAH TOA的最佳方法! – IanS