我试图解析分隔字符串中的单词,并按顺序排列捕获组。例如
dog.cat.chicken.horse.whale
我知道([^.]+)
可以解析每个单词,但这会将每个字符串放在捕获组1中。
Match 1
Full match 0-3 `dog`
Group 1. 0-3 `dog`
Match 2
Full match 4-7 `cat`
Group 1. 4-7 `cat`
Match 3
Full match 8-15 `chicken`
Group 1. 8-15 `chicken`
Match 4
Full match 16-21 `horse`
Group 1. 16-21 `horse`
Match 5
Full match 22-27 `whale`
Group 1. 22-27 `whale`
我真正需要的是像
Match 1
Full match 0-27 `dog.cat.chicken.horse.whale`
Group 1. 0-3 `dog`
Group 2. 4-7 `cat`
Group 3. 8-15 `chicken`
Group 4. 16-21 `horse`
Group 5. 22-27 `whale`
我尝试了多次迭代但没有成功,有人知道怎么做吗?
答案 0 :(得分:1)
这种情况没有好的解决方案。您可能要做的就是添加可选的non-capturing groups和捕获的<{3>}来计算一些设置的组数。
所以,它可能看起来像
([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)(?:\.([^.]+))?(?:\.([^.]+))?(?:\.([^.]+))?
依此类推,只需添加更多(?:\.([^.]+))?
,直到达到应定义的限制为止。
请参阅regex demo。
请注意,您可能希望锚定模式以避免部分匹配:
^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)(?:\.([^.]+))?(?:\.([^.]+))?(?:\.([^.]+))?$
^
匹配字符串的开头,$
断言字符串末尾的位置。