为什么MATLAB的regexp只返回第一个匹配标记字符串?

时间:2015-11-12 15:41:30

标签: regex matlab

假设我们在MATLAB中有这个代码:

ax = 'aa+bb+cc+dd';
middle_part = regexp(ax, '\+(\w+)\+','tokens');

为什么MATLAB只返回'bb'作为输出,而不是'bb''cc'

1 个答案:

答案 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匹配。