2017-02-02 120 views
1

如果我使用下面的代碼,正則表達式組不顯示預期的Unicode字符串。有人可以向我解釋我是否犯了一個錯誤,或者甚至有可能它是perl本身的一個固有問題。Perl正則表達式組不正確顯示Unicode字符

echo 'éá'|perl -ne 'if (/(\P{L}+)/) { print $1; }' 
� 

即使我藉此explanation考慮,並添加UTF-8編碼層到perl,它仍然沒有給我字符串「EA」爲正則表達式組:

echo 'éá'|perl -CS -ne 'if (/(\P{L}+)/) { print $1,$_; }' 

éá 

的該組的輸出似乎爲空,幷包含換行符號。

任何幫助,非常感謝。

+1

使用'/(\ p {L} +)/'中,使用相反的正則表達式。 –

+0

What @WiktorStribiżew說的是''P'大寫'P'意味着_不是其中之一,而'\ p'帶有一個小'p'就是其中的一個。 – simbabque

+0

非常感謝您的快速回復。 –

回答

2

在您的輸入中,éá是2個Unicode字母。 \P{L}是一個與任何字符匹配的結構,而不是 Unicode字母。

因此,使用相反的構造 - \p{L} - 您將解決您的問題。

使用

/(\p{L}+)/