MATLAB中的多个捕获组

时间:2013-07-10 15:12:42

标签: regex matlab

我有一个字符串,其中包含数字或字母a,可能后跟rl

在MATLAB中,以下正则表达式返回为

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

我希望单独10r,因为我有两个捕获组。有没有办法获得一个单独返回的单元格数组?我在文档中看不到它。

2 个答案:

答案 0 :(得分:4)

你想要'代币'而不是'匹配'

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

或者,如果你想获得幻想,请为令牌命名并获取结构数组:

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

答案 1 :(得分:0)

如果你想匹配

<块引用>

可以是数字或字母 a,可能后跟 rl,因为 * 表示 0 次或多次。

您也可以使用 [0-9]+ 来匹配至少一个数字,并使用字符类来匹配 r 或 l。

([0-9]+|a)([lr]?)

模式匹配:

  • ([0-9]+|a) 捕获组 1,匹配 1+ 个数字 0-9 或匹配 a
  • ([lr])? 捕获 group 2,可选择匹配 lr

Regex demo

为了防止部分匹配,您还可以使用单词边界:

\<([0-9]+|a)([lr]?)\>