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'是十六进制数。
答案 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;