Perl正则表达式组不能正确显示unicode字符

时间:2017-02-02 14:37:36

标签: regex perl unicode

如果我使用以下代码,则regex组不会显示预期的unicode字符串。有人可以向我解释我是否犯了错误,或者甚至可能是perl本身的内在问题。

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

即使考虑到此explanation并将UTF-8编码图层添加到perl,它仍然不会为正则表达式组提供字符串'éá':

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

éá

该组的输出似乎为空,并包含换行符号。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在您的输入中,éá是2个Unicode字母。 \P{L}是一个匹配任何字符而非 Unicode字母的构造。

因此,使用相反的构造 - \p{L} - 您将解决您的问题。

使用

/(\p{L}+)/