【发布时间】:2013-09-03 21:01:46
【问题描述】:
我有以下行,我想通过正则表达式捕获几个字符串:
l = '15 1180 62444 e0e0 049c f3ec 104';
我正在扩充以下正则表达式以在此行上进行操作:
d = regexpi(l, '([0-9a-f]+)\s?', 'tokens');
当执行这一行时,我得到了length(d) == 7。正则表达式不应该只匹配第一次出现,即length(d) == 1 和d{1} == '15'?
对于它的价值,我在 Perl 中使用了相同的正则表达式,发现它只匹配模式的第一个实例(这是我所期望的):
my $l = ... #defined above already
$l =~ m/([0-9a-f]+)\s?/i;
if (! defined($2)){ # $2, $3, ..., $n will be defined for n matches
print "Didn't match twice!\n"; # this prints when I execute the script
}
【问题讨论】:
-
你到底想匹配/捕获什么?
-
@hwnd - 我想让每个十六进制/十进制值类似于 OP 中的第一行。我的问题主要是试图理解为什么 MATLAB 中的正则表达式行为与 Perl 等其他正则表达式解析器不同。我拥有的单行 MATLAB 命令完美运行,但我没想到。
-
regexpi 的帮助文本说:默认情况下,regexpi 返回所有匹配项。要仅查找第一个匹配项,请使用
regexpi(STRING,EXPRESSION,'once')。 -
ayyy,我应该知道要更仔细地查看帮助 :) 我最初在使用 MATLAB 之前用 Perl 编写了我的脚本,并错误地认为正则表达式在两种语言中的处理方式相同。