Re: [問題] 中英文區分
看板RegExp (正規表示式 Regular Expression)作者MichaelHsin (BBS之蟲)時間17年前 (2007/11/09 00:14)推噓4(4推 0噓 2→)留言6則, 3人參與討論串3/4 (看更多)
※ 引述《MichaelHsin (BBS之蟲)》之銘言:
: 另外,因為 Big5 的第二個字元(low-byte)範圍包含了 $w 定義的字元,會導致上面
: 的 [$w]+ 會把 Big5 的 low-byte 也包進來,而導致空白加在不對的地方,所以要
: 另外處理。UTF-8 則是沒這個問題。
應付 Big5 的解法:
1. 正解:使用 Big5-aware regex engine
例如 perl 可以 use encoding
2. 惡搞解:正解不能用的時候
隨手想了一個,用 s///e 達成:
=====
# 這是 strict Big5-1985 的定義範圍
# 要取廣義的 Big5-Eten 或是 Big5-UAO 可修改 $bh 和 $bl
# Big5 high-byte
$bh = "\\xa1-\\xfe";
# Big5 low-byte
$bl = "\\xa1-\\xfe\\x40-\\x7e";
# greedy 取最長的連續 Big5 string,及其前、後一或零個字元,分別為 $2, $1, $3
# 如果 $1 不是空白,就在 $1 和 $2 間加上一個空白
# 如果 $3 不是空白,就在 $2 和 $3 間加上一個空白
# 兩行請自行接上
$str =~ s/(.?)((?:[$bh][$bl])+)(.?)/
$1 . (1 ne " " ? " " : "") . $2 . ($3 ne " " ? " " : "") . $3/ge;
=====
連同上篇,雖然是用 perl 寫的,但應該都可用各種語言/環境提供的 regex engine
做到同樣的效果。
--
芸曰:「今世不能,期以來世。」
余曰:「來世卿當作男,我為女子相從。」
芸曰:「必得不昧今生,方覺有情趣。」
余笑曰:「幼時一粥猶談不了;若來世不昧今世,合巹之夕,細談隔世,更無合
眼時矣。」
-- 沈復 《浮生六記》
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.55
→
11/09 00:18, , 1F
11/09 00:18, 1F
→
11/09 00:18, , 2F
11/09 00:18, 2F
推
11/09 06:43, , 3F
11/09 06:43, 3F
推
11/09 13:25, , 4F
11/09 13:25, 4F
推
11/09 17:56, , 5F
11/09 17:56, 5F
推
11/09 17:57, , 6F
11/09 17:57, 6F
討論串 (同標題文章)
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章