-1

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”是十六进制数字。

4

1 回答 1

5

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

您没有提供样本数据。一种模式,如

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

可能会给你你想要的。\b匹配单词边界,这将限制十六进制数字出现在单个“单词”中。</p >

Regexp::Common术语中,上述行表示为

my @resultado = $texto =~ /\b($RE{num}{int}{-base => 16})\b/g;
于 2013-07-17T16:31:29.927 回答