假设我们在MATLAB中有这个代码:
ax = 'aa+bb+cc+dd';
middle_part = regexp(ax, '\+(\w+)\+','tokens');
为什么MATLAB只返回'bb'
作为输出,而不是'bb'
和'cc'
?
答案 0 :(得分:2)
您需要将第二个+
置于前瞻中,以便正则表达式引擎不会使用它。 Here is an answer of mine on how look-aheads work
以下是代码段:
ax = 'aa+bb+cc+dd';
middle_part = regexp(ax, '\+(\w+)(?=\+)','tokens');
disp(middle_part)
结果:
{
[1,1] =
{
[1,1] = bb
}
[1,2] =
{
[1,1] = cc
}
}
因此,简而言之,以下是正在发生的事情:\+(\w+)\+
匹配+bb+
,并在+
之后bb
之后移动索引。因此,只有cc+dd
进行测试。找不到匹配项,因为该模式需要在1个或多个单词字符周围加上2 +
个符号。
使用前瞻版本\+(\w+)(?=\+)
,引擎会匹配+bb
前面的+
,并在第二个b
之后立即移动索引。左边的字符串是+cc+dd
。所以,还有另一个+cc
匹配。