看板 RegExp 關於我們 聯絡資訊
※ 引述《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