为什么MATLAB';s regexp是否只返回第一个匹配标记字符串?

为什么MATLAB';s regexp是否只返回第一个匹配标记字符串?,regex,matlab,Regex,Matlab,假设我们在MATLAB中有以下代码: ax = 'aa+bb+cc+dd'; middle_part = regexp(ax, '\+(\w+)\+','tokens'); 为什么MATLAB只返回'bb'作为输出,而不返回'bb'和'cc'?您需要将第二个+放在前瞻中,这样它就不会被正则表达式引擎使用 下面是代码片段: ax = 'aa+bb+cc+dd'; middle_part = regexp(ax, '\+(\w+)(?=\+)','tokens'); disp(middle_par

假设我们在MATLAB中有以下代码:

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

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

您需要将第二个
+
放在前瞻中,这样它就不会被正则表达式引擎使用

下面是代码片段:

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+
,并将索引移到
+
后面的
+
后面。因此,只有
cc+dd
需要测试。找不到匹配项,因为模式需要在1个或多个单词字符周围使用2个
+
符号


使用前瞻版本,
\+(\w+(=\+)
,引擎将匹配位于
+
正前方的
+bb
,并将索引移动到第二个
b
之后。左边的字符串是
+cc+dd
。因此,还有另一个
+cc
匹配项。

因为您使用了后面的
+
。由于重叠匹配,请使用前向
“\+(\w+)(=\+)”
。@Stribizev。谢谢你的评论。为什么这个函数只在我的代码中找到第一个匹配的字符串?你能在回答中描述更多吗?@user2991243:我添加了一个扩展的答案。请点击我关于lookaheads答案的链接,这将帮助你更好地理解它们是如何工作的。这里和链接帖子中的信息很棒,谢谢分享!