gpt4 book ai didi

regex - 当我使用一个字符长的字符集时,为什么我的正则表达式不匹配?

转载 作者:行者123 更新时间:2023-12-01 12:40:00 27 4
gpt4 key购买 nike

我正在尝试匹配 Perl 中的货币值(value)。在英国,我将从仅匹配 £ 开始s,稍后会扩展到其他货币,所以为了表示这一点,我把 £字符集中的字符。代码如下所示:

my $re = qr/ Spent \s+ [£] (?<amount> \d+) /x;
if ( $input =~ $re ) {
print $+{amount};
}

这是一个示例输入文件:
- Spent £6 on beer
- Spent £4 on sobriety pills

然而,如果我运行这个文件,它什么都不匹配!但是,如果我删除 £从它的字符集中:
my $re = qr/ Spent \s+ £ (?<amount> \d+) /x;

现在数字被打印出来。请注意,我删除了 []从正则表达式。字符集不是要匹配它们的任何封闭值吗?更奇怪的是,如果我更换 £正则表达式和输入文件中带有 ASCII 字符的字符,例如 E ,即使它包含在字符集中也可以正常工作。

脚本和输入文件都是 UTF-8,我使用的是 Perl 5.18.2,我要导入的唯一模块是 Moose。

最佳答案

你使用什么编码? UTF-8?你告诉 Perl 你这样做了吗?

use utf8; # The source is in UTF-8.

另外,如果 $input 来自一个文件,你有没有告诉 Perl 它使用什么编码?
open my $HANDLE, '<:encoding(utf-8)', 'input.txt' or die $!;

关于regex - 当我使用一个字符长的字符集时,为什么我的正则表达式不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com