如果我使用以下代码,则regex组不会显示预期的unicode字符串。有人可以向我解释我是否犯了错误,或者甚至可能是perl本身的内在问题。
echo 'éá'|perl -ne 'if ( /(\P{L}+)/ ) { print $1; }'
�
即使考虑到此explanation并将UTF-8编码图层添加到perl,它仍然不会为正则表达式组提供字符串'éá':
echo 'éá'|perl -CS -ne 'if ( /(\P{L}+)/ ) { print $1,$_; }'
éá
该组的输出似乎为空,并包含换行符号。
非常感谢任何帮助。
答案 0 :(得分:2)
在您的输入中,éá
是2个Unicode字母。 \P{L}
是一个匹配任何字符而非 Unicode字母的构造。
因此,使用相反的构造 - \p{L}
- 您将解决您的问题。
使用
/(\p{L}+)/