我试图在Perl中匹配货币值。在英国,我将开始只匹配£
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;
现在这些数字会被打印出来。请注意,我从正则表达式中删除了[]
。 Aren的字符集是否与其所附值相匹配?甚至更奇怪的是,如果我用正则表达式替换正则表达式和输入文件中的£
字符,例如E
,即使它是正常的,它也可以正常工作用字符集括起来。
脚本和输入文件都是UTF-8,我在Perl 5.18.2上,我导入的唯一模块是Moose。
答案 0 :(得分:2)
您使用什么编码? UTF-8?你告诉Perl你这样做了吗?
use utf8; # The source is in UTF-8.
另外,如果$ input来自文件,你告诉Perl它使用了什么编码吗?
open my $HANDLE, '<:encoding(utf-8)', 'input.txt' or die $!;
答案 1 :(得分:2)
将£
替换为其unicode:
my $re = qr/ Spent \s+ [\u00A3] (?<amount> \d+) /x;