Вам нужно поместить второй +
в lookahead, чтобы он не потреблялся двигателем регулярных выражений. 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
для тестирования. Не найдено совпадений, поскольку шаблон требует 2 +
символов около 1 или более символов слова.
С версией опережения, \+(\w+)(?=\+)
, двигатель соответствует +bb
, которая находится прямо перед +
и перемещает указатель сразу после второго b
. Строка слева - +cc+dd
. Итак, есть еще один матч +cc
.
Потому что вы потребляете хвост '+'. Используйте lookahead '' \ + (\ w +) (? = \ +) '' –
Из-за совпадающего совпадения. –
@стрибижев. Спасибо за комментарий. Почему эта функция обнаружила только первую строку в моем коде? Можете ли вы описать больше в ответ? – user2991243