2013-07-10 2 views
1

У меня есть строка, которая либо имеет номер или букву a, возможно, затем r или l.Несколько групп захвата в MATLAB

В MATLAB следующие регулярное выражение возвращает в качестве

>> regexp('10r', '([0-9]*|a)(l|r)*', 'match') 
ans = 
    '10r' 

Я ожидал бы 10 и r отдельно, потому что у меня есть две группы захвата. Есть ли способ получить массив ячеек с возвращаемыми независимо? Я не вижу этого в документации.

ответ

4

Вы хотите «фишки» вместо «» матча

>> toks = regexp('10r', '([0-9]*|a)(l|r)*', 'tokens'); 
>> toks{1} 
ans = 
    '10' 'r' 

Или, если вы хотите получить фантазии, имя лексемы и получить массив STRUCT:

>> toks = regexp('10r', '(?<number>[0-9]*|a)(?<letter>l|r)*', 'names'); 
>> toks 
toks = 
    number: '10' 
    letter: 'r' 
+0

идеальный! Второй пример замечательный. – RazerM

Смежные вопросы