【发布时间】:2022-01-25 12:24:18
【问题描述】:
我需要用正则表达式解析一个正则表达式。我有一个正则表达式字符串:
[a-z]{1}[-][0-9]{4}[-][ab]
我想出的用于解析上述字符串的实际正则表达式,并且 几乎可以工作 是:
/(?|\[(.*?)\]\{(.*?)\}|\[(.*?)\](.*?))/g
它的作用可以在这个 regex101 example 中看到,这里的错误是在 Match 2 及其 Group 1 (-][0-9,应该只是-)。
目标是匹配方括号 [] 内的所有内容,后跟大括号 {} 内的数字。如果方括号 [] 后面的大括号 {} 丢失,则应使用 null 填充它,这就是替代组对分支重置组所做的事情。此外,如果只是方括号后跟一个方括号,那么它也应该在以后起作用(匹配方括号内部的内容 [] 并用 null 填充 Group 2 em>)。
我的正则表达式不会在第三个[-] 上停止并将其匹配到-][0-9 而不是仅匹配- 然后从解析[0-9]{4} 开始。
预期的匹配应该是:
[a-z]{1}
a-z
1
[-]
-
null
[0-9]{4}
0-9
4
[-]
-
null
[ab]
ab
null
当前匹配不正确,如下:
[a-z]{1}
a-z
1
[-][0-9]{4}
-][0-9
4
[-]
-
null
[ab]
ab
null
我错过了什么?
【问题讨论】:
-
这是您所期望的吗?
\[([^]]*)](?:\{(\d+)\})?。如果{}中的量词缺失,则该匹配项将没有第 2 组 -
是的,这非常接近,虽然 Group 2 必须始终存在,如果缺少,则应将其设置为
null。请给出答案。 -
我明白了,我错过了这部分
[([^]]*)\]。谢谢! -
使用this,您将始终获得第 1 组和第 2 组。但是,在第 2 组中,大括号也将被捕获:(
-
是的,这也可以。谢谢您的帮助!请给出答案。