2009-10-12 37 views
4

我目前在Perl中獲取正則表達式(取自我的earlier question)以匹配來自非ASCII語言環境的單詞字符(即德語變音符號) 。語言環境感知的Perl正則表達式(匹配的單詞邊界)

我已經嘗試了各種東西,如設置正確的語言環境(使用setlocale),將我從MySQL接收的數據轉換爲UTF8(使用decode_utf8),等等......不幸的是,無濟於事。谷歌也沒有太多幫助。

是否有機會獲得以下的正則表達式語言環境意識,使

$street = "Täststraße"; # I know that this is not orthographically correct 
$street =~ s{ 
       \b (\w{0,3}) (\w*) \b 
      } 
      { 
       $1 . ('*' x length $2) 
      }gex; 

結束返回$street = "Täs*******"代替"Tästs***ße"

回答

6

我期望正則表達式導致「Täs*******」。這是我在上面的代碼中使用utf-8編碼文件「使用utf8」時得到的結果。

(。如果一切的Latin-1,改變正則表達式引擎的行爲。因此utf8::upgrade存在見Unicode::Semantics

編輯:我看你定你的職位和我們達成一致的預期結果。基本上,當你想在你的regexps上使用Unicode語義時,使用Unicode :: Semantics。

+0

這很奇怪......當以獨立的方式運行代碼確實有效。 事實證明,「使用語言環境」打破了事情......一旦我刪除了一切恢復正常。 – 2009-10-12 08:06:38

+0

是的,應該避免使用「locale」。如果你在UTF8編碼的源代碼中有utf8文字,請使用「utf8」。否則,使用Encode處理編碼,並在擔保時使用Unicode :: Semantics。 – jrockway 2009-10-12 08:08:00

+0

在所有情況下,「使用語言環境」是一個壞主意嗎?它是否應該被棄用? – Ether 2009-10-12 16:41:38

相關問題