2014-10-26 109 views
1

我正在寻找匹配的任何文本和非文本值,位于内“”,但只有第一和[最后一个实例之间]正则表达式 - 第一双括号中最后一次出现之间的匹配

window.google.ac.h([ “文本”,[[ “文本1”,0],[ “text2” 中,0,[3]],[ “text3” 中,0,[“text4”,0,[3]],[“text5”,0],[“text6”,0],[“text7”,0 ]],{“q” hygjgjhbjh“,”k“:1}])

到目前为止,我已经设法通过得到的一些结果(很不理想):“(。*?)”,0 我的问题是,它要么一路匹配,直到

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

或在

[ “文本” 开始匹配,

我只需要匹配text1的文本2文字3 .. text7

注:双括号位置和实例的NR,第一和最后之间并不一致。

感谢您的帮助!

编辑:我使用http://regexr.com/测试它

+2

你正在使用哪种语言/工具? – anubhava 2014-10-26 15:02:56

+0

嗨,我使用http://regexr.com/来测试它。这是Excel VBA,谢谢。 – Sam 2014-10-26 17:11:50

+0

@Sam在这种情况下,我的答案应该工作,因为VBA使用.NET正则表达式引擎。 – 2014-10-26 21:45:05

回答

0

根据您的正则表达式引擎,您可以使用这一模式

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

Demo

+0

此模式将匹配'“abcd”]]'并且它不停止此字符串:'[[“abcd”]]“efgh “]]' – 2014-10-26 15:47:08

+0

你说的没错,这里的假设是输入字符串有一个平衡的开放和封闭的方括号。 – 2014-10-26 16:07:24

2

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

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

单独在"(.+?)"上进行的全局匹配会返回匹配项,其首个匹配组将包含引号之间的字符。向后注释断言(?<=\[\[.*)指示它仅包括在后面任何地方存在[[的情况,即在[[的第一实例之后。类似地,前瞻断言(?=.*\]\])告诉它只包括前面任何地方有]]的情况,即在]]的最后一个情况之前。

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

+0

很好的书面和解释。我自己对正则表达式知之甚少,这有助于(我)更好地理解它,+1 – 2014-11-06 16:13:14

相关问题