Re: [問題] 中英文區分
看板RegExp (正規表示式 Regular Expression)作者MichaelHsin (BBS之蟲)時間17年前 (2007/11/08 23:38)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/4 (看更多)
※ 引述《hunterfish (可愛的阿宏)》之銘言:
: 沒想到PTT也有地方可以討論RegExp耶
: 以後又多一個常逛的版了^^
: 前一陣子寫RegExp
: 一直試不出來要如何寫才能讓中文和英文區隔出來
: 比如說:
: 我叫hunterfish我現在在RegExp版
: 要變成
: 我叫 hunterfish 我現在在 RegExp 版
: 我原本想法是想碰到英文字為首和結尾就自動塞入一個空隔
: 不知道這種寫法要怎樣去實作
: 還有其他更好的寫法嗎?
: 先謝謝這邊的大大們了!!
以 perl 為例,配合 zero-width look-(ahead|behind):
=====
# $w 和 $n 只是方便閱讀後面的 regex,如果不喜歡的話直接代換在裡面也是可以
# 「英文字」的定義
$w = "-A-Za-z0-9_";
# $w 加上空白
$n = "$w ";
# input: $str
# 把「英文字」的前面加上空白,如果有空白或是行首就不加
$str =~ s/(?<=[^$n])([$w]+)/ $1/g;
# 把「英文字」後面加上空白,如果已有空白或是行尾/換行符號就不加
$str =~ s/([$w]+)(?=[^$n])/$1 /g;
=====
有些小細節像 $w, $n 裡的 "-" 為什麼要放最前面,想一下它代換進什麼地方應該
就懂了 :p
另外,因為 Big5 的第二個字元(low-byte)範圍包含了 $w 定義的字元,會導致上面
的 [$w]+ 會把 Big5 的 low-byte 也包進來,而導致空白加在不對的地方,所以要
另外處理。UTF-8 則是沒這個問題。
--
芸曰:「今世不能,期以來世。」
余曰:「來世卿當作男,我為女子相從。」
芸曰:「必得不昧今生,方覺有情趣。」
余笑曰:「幼時一粥猶談不了;若來世不昧今世,合巹之夕,細談隔世,更無合
眼時矣。」
-- 沈復 《浮生六記》
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.55
討論串 (同標題文章)
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章