Re: [問題] 把中文字切出來

看板Perl作者 (jet)時間17年前 (2007/11/23 10:19), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《Dreamer77 (追夢)》之銘言: : 請問 : 要如何把中文一個字一個字切出來 : (輸入的可能是utf8 or big5 都有可能) : p,s 前面提供的方法 split(//,$string) : 我試了之後是 不僅連英文都變成一個字母一個字母@@" : 而且 中文會有亂碼.. : 不知道有沒有人知道方法 thanks 1. regular exp $lines="輸出的可能是utf8 or big5 都有可能"; my $big5 = "[\xA1-\xF9][\x40-\x7E\xA1-\xFE]"; my @words=$lines=~/($big5|\x0d\x0a|[\x21-\x7e]|\s+)/g; 2.decode<=>encode #用以下的話 中文字length仍是 2 $lines=decode('big5',$lines); @words=split //,$lines; #中文字算是一個字元,所以會被切開 map {$_=encode('big5',$_)} @words; #切回去之前的模式,中文字兩個字元 3.other #用這招的話,中文字length會變成 1 use encoding 'big5', STDIN => 'big5', STDOUT => 'big5'; @words=split //,$lines; 用這三個方法,就可以隨意切換中文字的控制了 要看要處理的內容來看用哪種比較好,我這三種都用過,各有各的好處跟壞處 #英文如果不要一個字一個字切開 那就用第一條 my $big5 = "[\xA1-\xF9][\x40-\x7E\xA1-\xFE]"; my @words=$lines=~/($big5|\x0d\x0a|[\x21-\x7e]+ |\s+)/g; ~~~~~~多一個+ 應該是這樣 我沒仔細去測試:p -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.133 ※ 編輯: jjt 來自: 140.121.197.133 (11/23 10:21)

11/23 16:09, , 1F
thank you very much !!!!
11/23 16:09, 1F
文章代碼(AID): #17HZYsch (Perl)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #17HZYsch (Perl)