为什么在正则表达式的末尾添加字符类不能匹配十六进制数?

时间:2013-07-17 16:23:18

标签: regex perl

Perl接受:

my @resultado = $texto =~ /[^g-zG-z]$RE{num}{real}{-base=>16}/g

但不接受:

my @resultado = $texto =~ /[^g-zG-z]$RE{num}{real}{-base=>16}[^g-zG-z]/g

我最后添加[^g-zG-z];在一开始它工作但不是在最后。为什么? 我想打印十六进制数字,但是,例如,在有“call”这样的单词的情况下,它不应该说'ca'是十六进制数。

1 个答案:

答案 0 :(得分:5)

字符类[^g-zG-z]匹配不在g到z范围内的单个字符。这不是你想要匹配十六进制数字的东西。例如,如果您的十六进制数出现在字符串的末尾(即,后面没有任何内容),则匹配将失败。

您没有提供样本数据。像

这样的模式
my @resultado = $texto =~ /\b([0-9A-Fa-f]+)\b/g;

可能会给你你想要的东西。 \b匹配单词 b oundary,并限制十六进制数字出现在单个“单词”中。

Regexp::Common字词中,上述行表示为

my @resultado = $texto =~ /\b($RE{num}{int}{-base => 16})\b/g;