我想采用类似 xpath 的字符串,例如:
a.b.c[2].d[123].e1[4].f88[5]
并将每个路径部分作为一个匹配项,将每个下标(“数组索引”)作为一个组,如下所示:
match 1: a
match 2: b
match 3: c, group 1: 123
match 4: e1, group 1: 4,
match 5: f88, group 1: 5
我尝试了以下方法(不起作用):
[^.]+(?:\[)*([0-9]+)*(?:\])*
据我了解,这个正则表达式意味着:
- 首先,匹配除点以外的所有字符
- 然后,检查(但不要捕获)左方括号 - 它可能出现 0 次到无限次。
- 然后,检查长度为 1 到无限的任何数字,并作为一个组捕获。
- 然后,为右方括号再次执行 2。
但它不起作用。
我怎样才能让它发挥作用?
最佳答案
[^.]+(?:\[)*([0-9]+)*(?:\])*
“但它不起作用” 因为 +
是贪婪的 并且消耗点。此外,每个下标都是可选的,而不是部分可选的。
应用这些标准,这个表达式确实有效:
([^.\[]+)(?:\[(\d+)\])?
关于正则表达式获取类似 xpath 的字符串中的每个项目,每个下标作为一个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69670141/