正则表达式 - 在双方括号的第1次和最后一次出现之间匹配

时间:2014-10-26 14:59:11

标签: regex vba excel-vba excel

我希望匹配位于“”内的任何文字和非文字值,但仅限于 [[的第1个和最后一个实例之间>]]

  

window.google.ac.h([ “文本”,的 [[ “文本1”,0],[ “text2” 中,0,[3]],[ “text3” 中,0 ],[ “文本4”,0,[3]],[ “text5”,0],[ “text6”,0],[ “text7”,0   ]] 下,{ “Q”: “hygjgjhbjh”, “K”:1}])

到目前为止,我已经设法通过使用:“(。*?)”,0来获得一些结果(远非理想) 我遇到的问题是它要么一直匹配,直到

  

“文本4”,0,[3]]

或在

开始匹配
  

[ “文本”,

我只需匹配 text1 text2 text3 .. text7

注意:双方括号位置和实例的nr,在第1个和最后一个之间不一致。

感谢您的帮助!

编辑:我正在使用http://regexr.com/进行测试

2 个答案:

答案 0 :(得分:2)

嗯,你没有说出哪种语言,但是使用.NET正则表达式(主要遵循Perl标准),使用以下正则表达式的全局匹配的所有匹配的第一个匹配组将包含你的值想:

(?<=\[\[.*)"(.+?)"(?=.*\]\])

"(.+?)"上的全局匹配将返回其第一个匹配组将包含引号之间字符的匹配项。后瞻性断言(?<=\[\[.*)告诉它仅包括后面有[[的情况,即在[[的第一个实例之后。同样,前瞻断言(?=.*\]\])告诉它只包含前面任何地方]]的情况,即]]的最后一个实例之前。

我使用PowerShell对此进行了测试。进行全局匹配并提取所有结果的第一个匹配组的确切语法将取决于语言。

答案 1 :(得分:0)

根据您的RegEx引擎,您可以使用此模式

(?:^.*?\[\[|\G[^"]*)("[^"]*")(?=.*\]\])

Demo