我有這樣的文字:拆分文本由詞和標點符號
一件男人的夾克是綠色的。他 - 現代史上最大的明星 - 騎行速度非常快(每小時230公里)。這怎麼可能?!他使用了什麼樣的自行車?他的自行車的半自動裝置非常昂貴,極大地有助於達到這種速度。有些(或許多)聲稱他是世界上最快的! 「我看見他騎自行車!」約翰迪爾先生說。 「他設定的速度是每小時133.78公里,」這聽起來令人難以置信;聽起來很欺騙。
我想有以下結果數組:
words[1] = "A"
words[2] = "man's"
words[3] = "jacket"
...
words[n+1] = "color"
words[n+2] = "."
words[n+3] = "He"
words[n+4] = "-"
words[n+5] = "the"
...
這個數組應包括所有文字和標點符號分開。可以用regexp來執行嗎?任何人都可以幫助撰寫它嗎? 謝謝!
編輯:根據要求顯示我的工作。 我使用下面的函數處理的內容,但我想要做相同的正則表達式:
$text = explode(' ', $this->rawText);
$marks = Array('.', ',', ' ?', '!', ':', ';', '-', '--', '...');
for ($i = 0, $j = 0; $i < sizeof($text); $i++, $j++) {
$skip = false;
//check if the word contains punctuation mark
foreach ($marks as $value) {
$markPosition = strpos($text[$i], $value);
//if contains separate punctation mark from the word
if ($markPosition !== FALSE) {
//check position of punctation mark - if it's 0 then probably it's punctuation mark by itself like for example dash
if ($markPosition === 0) {
//add separate mark to array
$words[$j] = new Word($j, $text[$i], 2, $this->phpMorphy);
} else {
$words[$j] = new Word($j, substr($text[$i], 0, strlen($text[$i]) - 1), 0, $this->phpMorphy);
//add separate mark to array
$punctMark = substr($text[$i], -1);
$j += 1;
$words[$j] = new Word($j, $punctMark, 1, $this->phpMorphy);
}
$skip = true;
break;
}
}
if (!$skip) {
$words[$j] = new Word($j, $text[$i], 0, $this->phpMorphy);
}
}
你應該在解決問題 – AlexP
http://stackoverflow.com/questions/16137575/preg-split-regex-for-splitting-a-sentence-into-發表您的嘗試單詞和標點符號 –
結尾的單詞「?!'與單獨的'?'和'!'或單獨的'?!'結果?是否應該包括引號(如''''或''')?如果應該包含''',那麼你發佈的這種情況如何:'man's'? –