0

我有以下行,我想通过正则表达式捕获几个字符串:

l = '15                 1180       62444    e0e0                   049c     f3ec      104';

我正在扩充以下正则表达式以在此行上进行操作:

d = regexpi(l, '([0-9a-f]+)\s?', 'tokens');

执行此行时,我得到了length(d) == 7. 正则表达式不应该只匹配第一次出现,即length(d) == 1d{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
}
4

2 回答 2

2

正如使用regexpi...

start = regexpi(str,expr)返回一个行向量 start,其中包含 str 中与正则表达式字符串 expr 匹配的子字符串的索引,无论大小写如何。

当 str 或 expr 是字符串元胞数组时,regexpi 返回索引行向量的 m×n 元胞数组,其中 m 是 str 中字符串的数量,n 是 expr 中正则表达式模式的数量。

[start,finish] = regexpi(str,expr)返回一个额外的行向量完成,其中包含 start 中相应子字符串的最后一个字符的索引。

[start,finish,tokens] = regexpi(str,expr)返回一个 1×n 元胞数组 tokens,它包含 start 和 finish 中相应子字符串中标记的开始和结束索引。记号在表达式 expr 中用括号表示。

[...] = regexpi(str,expr,'once')只找到第一个匹配项。(默认情况下,正则表达式返回所有匹配项。)如果未找到匹配项,则所有返回值为空。

于 2013-09-03T21:06:40.880 回答
0

根据MatLab 的regexpi页面,您应该寻找的第一页,regexpi

返回与正则表达式指定的字符模式匹配的每个子字符串的起点。

你得到一个起始位置的数组,第一个元素d{1}将是第一个匹配的偏移量,而不是它的“值”。

于 2013-09-03T21:20:35.940 回答