我有以下行,我想通过正则表达式捕获几个字符串:
l = '15 1180 62444 e0e0 049c f3ec 104';
我正在扩充以下正则表达式来操作这一行:
d = regexpi(l, '([0-9a-f]+)\s?', 'tokens');
执行此行时,我得到length(d) == 7
。 regexp不应该只匹配第一次出现,即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
}
答案 0 :(得分:2)
如使用regexpi
...
start = regexpi(str,expr)
返回一个行向量,start,包含str中与正则表达式字符串expr匹配的子串的索引,无论大小写如何。
当str或expr是字符串的单元格数组时,regexpi返回索引行向量的m-by-n单元格数组,其中m是str中字符串的数量,n是正则表达式模式的数量在expr。
[start,finish] = regexpi(str,expr)
返回一个额外的行向量结束,它包含start中相应子字符串的最后一个字符的索引。
[start,finish,tokens] = regexpi(str,expr)
返回1-by-n单元格数组,标记开始和结束时相应子字符串中的标记的开始和结束索引。在表达式expr。
[...] = regexpi(str,expr,'once')
找到第一场比赛。 (默认情况下,regexp返回所有匹配项。)如果未找到匹配项,则所有返回值均为空。
答案 1 :(得分:0)
按MatLab's regexpi
page,您应该查找的第一页regexpi
返回每个子字符串的起始点,该子字符串与正则表达式指定的字符模式匹配。
你得到一个起始位置数组,第一个元素d{1}
将是第一个匹配的偏移,而不是它的'value'。