【问题标题】:RegEx doesn't match in Perl: Why? [duplicate]RegEx 在 Perl 中不匹配:为什么? [复制]
【发布时间】:2015-12-26 19:45:59
【问题描述】:

我有这个(德语)示例字符串

Gesundheit und einen besseren Fußball- u. Musikgeschmack!

我要匹配- u.连接的单词

在这种情况下,我希望匹配 Fußball- u. Musikgeschmack 我编写了一个 RegEx 表达式,它正是这样做的,但如果我将它作为 Perl 脚本的一部分运行,它的工作方式似乎有所不同。

我的正则表达式是这样的:[ |^]*([A-Za-zÄäÖöÜüß]+[\-\\][ ]*[u][\.][A-Za-zÄäÖöÜüß ]+) 根据这个允许交互式 RegEx 测试的网站,它选择了它应该选择的内容:https://regex101.com/r/tN6gB4/1

perl 给我的是ball- u. Musikgeschmack

我在匹配ball 的块中有德语特殊字符ß,所以我不明白为什么它不匹配Fußball

【问题讨论】:

  • 你用过use utf8;吗?顺便说一句,[ |^]* 匹配空格、管道或插入符号 0 次或更多次。我想你只是想要(?:^| *)。甚至\b.
  • 谢谢你,这就是问题所在!

标签: regex perl


【解决方案1】:

确实,@stribizhev 似乎是对的,这是use utf8; 问题:这个编译指示说源文件中的字符串文字是 utf8 编码的,因此允许 Perl 将它们解码为 Unicode 并正常运行。

use utf8;
binmode(STDOUT, ":utf8");

$s = "Gesundheit und einen besseren Fußball- u. Musikgeschmack!";

$s=~/[ |^]*([A-Za-zÄäÖöÜüß]+[\-\\][ ]*[u][\.][A-Za-zÄäÖöÜüß ]+)/;
print($1)

输出:

Fußball- u. Musikgeschmack

详情请参阅perlunicode

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多