【问题标题】:Perl regex groups do not display unicode characters correctlyPerl 正则表达式组不能正确显示 unicode 字符
【发布时间】:2017-02-02 14:37:35
【问题描述】:

如果我使用以下代码,正则表达式组不会显示预期的 unicode 字符串。有人可以向我解释我是否做错了,或者它是否可能是 perl 本身的一个内在问题。

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

即使我考虑到这个explanation 并将 UTF-8 编码层添加到 perl,它仍然没有给我正则表达式组的字符串 'éá':

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

éá

该组的输出似乎是空的,并且包含一个换行符。

非常感谢任何帮助。

【问题讨论】:

  • 使用/(\p{L}+)/,你使用了相反的正则表达式。
  • @WiktorStribiżew 的意思是\P 带有大写P 表示不是其中之一,而\p 带有小p其中之一
  • 非常感谢您的快速回复。
  • 欢迎使用 Stack Overflow 和 Perl 标签。第一个问题措辞非常好。 :)
  • 您可以在 cmets 中使用反引号 `foo` 进行代码高亮显示。我看不出问题中的代码有什么不同。

标签: regex perl unicode


【解决方案1】:

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

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

使用

/(\p{L}+)/

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2016-01-28
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多