如何编写正则提取Path与child(支持带数字括号后缀)之间的字符串
问题原因分析
- 匹配失败的核心原因确实和方括号有关:正则语法中
[]是定义字符组的元字符,直接书写[0]会被识别为匹配单个字符0,而非字面量字符串[0],需要用反斜杠转义\[、\]才能匹配字面量方括号。 - 原有正则的前瞻规则仅覆盖了
child[0]场景,未兼容child[1]和无括号的child场景。
正确正则表达式
(?<=Path\.)[^.]*(?=\.child(?:\[\d+\])?)
规则说明
(?<=Path\.):正向后顾断言,限定匹配位置的前缀必须是字面量Path.,其中的.做了转义处理,避免被识别为正则通配符。[^.]*:匹配0个或多个非.的字符,精准捕获两个点之间的parent段,相比惰性匹配.*?执行效率更高,不会出现意外跨段匹配的问题。(?=\.child(?:\[\d+\])?):正向前瞻断言,限定匹配位置的后缀规则:- 固定前缀为字面量
.child - 后续可选匹配
[数字]结构:(?:\[\d+\])?为非捕获组,?表示该组可出现0次或1次,同时兼容带括号的child[0]/child[1]和无括号的child场景,方括号均做了转义处理。
- 固定前缀为字面量
匹配效果验证
- 测试串
Path.parent.child[0]:匹配结果为parent - 测试串
Path.parent.child[1]:匹配结果为parent - 测试串
Path.parent.child:匹配结果为parent
内容的提问来源于stack exchange,提问作者scheka
相关产品推荐
相关产品推荐

