3 回答

TA貢獻2036條經驗 獲得超8個贊
很有意思的問題.
研究了一個多小時,終于找到了一個解決方案.
測試發現,preg_split對中文(多字節)的分隔符處理可能真的存在問題.
原因可能是正則匹配時不能正常分隔一個多字節字符(猜測).
但我實驗用半角(英文)的分隔符就工作得很好.
于是
我在處理待分隔的文本前先對文本進行替換,把中文的句點和逗號都替換成英文半角的.然后再使用preg_split,暫時發現工作得不錯.
以下是我的測試代碼.
<?php
$test = <<<EOF
記者從有關人士處獲悉,嫦娥二號發射的各項準備工作全部就緒,昨日經專家組評審,衛星、火箭、發射場、測控等系統均情況正常,具備發射條件。今天起,西昌衛星發射中心的加注手將為火箭加注燃料。
據一位航天專家介紹,因為地球和月球都在轉動的緣故,所以地月之間的最佳交匯點每年僅出現3次,而這3次便是發射探月衛星的最佳節點,經過觀測,今年3次的出現時間分別為10月1日、10月2日和10月3日,而最佳發射窗口則是1日晚7時,2日晚8時和3日晚10時,其中國慶日晚7時為佳中之佳。
針對媒體稱10月1日發射窗口時間為晚6時59分57秒,該專家告訴本報記者,早3秒并非提前3秒發射,而是將這3秒時間預留出來,作為現場指揮員在發送倒計時口令的緩沖時間。(記者萬強)
EOF;
//$input = $_POST[$content]; //........................獲取要分割的字符串
$test = str_replace(",",',',$test);
$test = str_replace("。",'.',$test);
$mode="/[,|.]/s"; //......................用“逗號” 和 “句號” 分割字符串
$output = preg_split($mode,$test,-1);
print_r($output);
?>
============
樓主不防試試,我的代碼是gb2312的字串.
經測試在,字符串為UTF8時,也可以正常工作.

TA貢獻1780條經驗 獲得超4個贊
//split是正則方法分割字符,正確的寫法應是這樣。
$a = split("\.","1.2.3");
echo $a[0];
//用字符分割應是用explode
$a = explode(".","1.2.3");
echo $a[0];

TA貢獻1951條經驗 獲得超3個贊
//split是正則方法分割字符,正確的寫法應是這樣。
$a = split("\.","1.2.3");
echo $a[0];
//用字符分割應是用explode
$a = explode(".","1.2.3");
echo $a[0];
preg_split() 函數使用了 Perl 兼容正則表達式語法,通常是比PHP函數split()更快的替代方案。如果不需要正則表達式的威力,則使用 explode() 更快,這樣就不會招致正則表達式引擎的浪費。
本函數返回一個字符串數組,每個單元為 string 經區分大小寫的正則表達式 pattern 作為邊界分割出的子串。如果設定了 limit,則返回的數組最多包含 limit 個單元,而其中最后一個單元包含了 string 中剩余的所有部分。如果出錯,則 split() 返回 FALSE。
將 /etc/passwd 中的前四個字段分割出來:
- 3 回答
- 0 關注
- 652 瀏覽
添加回答
舉報