2015-08-15 108 views
2

为什么下面的正则表达式:混淆正则表达式的结果

"_id":"(.+?)"}\],"componentType":"(.+?)" 

该字符串:

"name":"in","_id":"a05d91a7-6be0-c252-08e9-bf94cc0be36e","value":"5.6"}],"_id":"e986915c-22db-429f-9fe7-ae2e2ddfa779","refId":"de9ff045-21ce-4833-af34-30f50c129840","failId":"8b723736-a391-fd7e-8d23-7cc72e568f48"},{"outputs":[{"metadata":{"label":{"value":"Output Integer","capco":"U"},"desc":{"value":"Output 
Integer.","capco":"U"}},"name":"f7018f5c-057c-6ab9-7300-875c712b87b7","_id":"daad7ae7-356b-57ca-037e-0c4bcb307201"}],"componentType":"model","metadata":{"signature":"ab7e00a928dc79af806b828e1831a95e","zOrder":1,"label":{"lang":"en","value":"BBBBBBBBBBB","capco":"U"},"geom":{"w":150,"x":203,"h":60,"y":324} 

底部从a05d91a7 UUID拉一切的组件类型,而不是来自于该_id底部?我有(据我所知)没有任何指示在id(。+?)模式和componentType模式之间拉动额外的内容?

我试图专门拉如下:

"_id":"daad7ae7-356b-57ca-037e-0c4bcb307201"}],"componentType":"model" 

要明确,UUID是可变的,hense的

+0

我想你需要一个像''_id“:”([^“] +?)”}],“componentType”:“([^”] +?)“';)的正则表达式。 –

+1

出于好奇,为什么不使用一些json库来解析输入? – nu11p01n73R

+0

不熟悉java的json库中可用的东西,我在jmeter中构建这些查询 –

回答

1
"_id":"([^"]*)"}],"componentType":"(.+?)" 

使用this.See(+?)演示。

https://regex101.com/r/uF4oY4/38

与您正则表达式的问题是.*?可以扩展基于它需要什么条件匹配ahead.when您使用[^"]*它的否定为基础的方法和无法超越一个"在任何情况下。

+0

我明白上述在做什么,但要理解错误,为什么简单(。+?)在引号内不起作用?这是什么让它超出了引号,因为?是否让它不贪婪? –

+1

@DavidTorrey它不贪婪,但你必须提供正则表达式的一种方法来停止。在这种情况下的结束条件是''}},“componentType”:“(。+?)”'不只是'“'.so它正在捕获所有的 – vks

+0

我在原始问题的任何地方都没有看到任何'。*?',我认为'。*?'可以工作得很好。 – Xufox

0

有一个专门的JMeter测试元素 - JSON Path Extractor它增加了对JMeter的JSON支持。

Using the XPath Extractor in JMeter的有关插件安装和一些JSONPath语言参考信息(向下滚动到“解析JSON”) - 这是比正则表达式更简单,不那么脆弱,更可读的