Re: [問題] 中英文區分

看板RegExp (正規表示式 Regular Expression)作者 (BBS之蟲)時間17年前 (2007/11/09 00:14), 編輯推噓4(402)
留言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
其實這兩篇用的 zero-width look-(ahead|behind) 和
11/09 00:18, 1F

11/09 00:18, , 2F
s///e 的方法都可以互換 :Qoo
11/09 00:18, 2F

11/09 06:43, , 3F
還可以先轉成UTF-8處理完在轉回去XD
11/09 06:43, 3F

11/09 13:25, , 4F
推先轉碼 XDDD
11/09 13:25, 4F

11/09 17:56, , 5F
轉碼的話,標準 Big5-1985 好解決,要是資料有 UAO 之
11/09 17:56, 5F

11/09 17:57, , 6F
類的東西,目前好像還沒有現成的轉碼器可以轉 UAO 的
11/09 17:57, 6F
文章代碼(AID): #17CpNaPk (RegExp)
討論串 (同標題文章)
文章代碼(AID): #17CpNaPk (RegExp)