2011-08-23 72 views
2

我的perl腳本提供了UTF-8中的任何語言的字符串。我需要大寫每個單詞的第一個字符,並將單詞的其餘字符轉換爲小寫。這必須在以UTF-8格式保留文本時完成。perl中UTF-8文本的詞邊界

以下似乎工作不夠好,當文本只包含拉丁字符

$my_string =~ s/([\w']+)/\u\L$1/g; 

我如何能得到這個在UTF-8字符串工作嗎?

+2

Perl沒有UTF-8字符串。它具有Unicode字符串,它有字節字符串,以字節爲單位。你在那裏寫的東西在當前版本的Perl中已經可以正常工作了。您可能需要在編譯單元的頂部使用類似'use v5.12','use v5.14'或'use feature「unicode_strings」'的東西來使其工作,但不需要其他任何東西。 – tchrist

+0

謝謝。我忘了提及我使用的Web服務器仍然有5.8 perl,所以不幸的是我沒有提供這些建議。 – appleton

回答

2

請參閱perlunicode瞭解您需要熟悉的設施的概況。基本上,你正在尋找像\p{LC}

雖然您的問題空間並不明確,並非所有腳本都有字符大小寫的概念。 LC屬性只會在腳本上匹配,所以它應該讓你在那裏。

+0

謝謝。 \ p {LC}而不是\ w似乎正常工作。 – appleton

+0

...儘管更接近\ w的替換大概是\ p {Word} – appleton

+0

順便提一下,「\ u \ L $ 1」中的\ u和\ L總是會正確轉換爲大寫和小寫,或者是否存在unicode替代這些? – appleton