2015-08-15 126 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」) - 這是比正則表達式更簡單,不那麼脆弱,更可讀的