2017-03-16 31 views
0

我有一個字符串,它看起來就像這樣:像正則表達式找到的UUID和文本

"name=Guy&Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e&Family.Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,eee79b5a-bf27-46c6-aaf0-ef0eced1945e&Children.Id=bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,ccc79b5a-bf27-46c6-aaf0-ef0eced1945e,ddd79b5a-bf27-46c6-aaf0-ef0eced1945e&Father.Id=fff79b5a-bf27-46c6-aaf0-ef0eced1945e" 

我想有一個正則表達式,將發現所有的組合(String.Id和他們的UUID):

Family | e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,vvv79b5a-bf27-46c6-aaf0-ef0eced1945e 
Children | bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,ccc79b5a-bf27-46c6-aaf0- ef0eced1945e,ddd79b5a-bf27-46c6-aaf0-ef0eced1945e 
Father | fff79b5a-bf27-46c6-aaf0-ef0eced1945e 

我想在PostgreSQL分析這個,現在我可以分析它的一些,但不是全部:

SELECT 
regexp_matches('"name=Guy&Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e&Family.Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,vvv79b5a-bf27-46c6-aaf0-ef0eced1945e&Children.Id=bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,ccc79b5a-bf27-46c6-aaf0-ef0eced1945e,ddd79b5a-bf27-46c6-aaf0-ef0eced1945e&Father.Id=fff79b5a-bf27-46c6-aaf0-ef0eced1945e"' 
,'&(\w*)\.Id=([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})', 'g')::text 

感謝

+1

你使用什麼語言/工具? –

+0

我想在postgreSQL中做這個正則表達式,但任何語言都應該沒問題:)即使在這裏:https://regex101.com/ – Gen4ik

+0

從一個記錄到很多SQL可能會非常棘手。 –

回答

1

你可以使用一個regex like so

(?:name=[^&]+&Id=[^&]+)?&([a-zA-Z]+).Id=([^&]+) 

與更換:

$1 | $2\n 

做些什麼:

首先,它看重的是name=[^&]+&Id=[^&]+一個可選的出現,這是name= ,後面至少有一個非&字符([^&]+),其次是&Id=,fol低至少一個非&字符([^&]+)。這全部包裝在一個非捕獲組(?: ...)中,後面跟着一個?以指示該組是可選的。

正則表達式的其餘部分,尋找一個&,接着通過含有至少一個字母字符(([a-zA-Z]+))第一捕獲組($1),隨後.Id=,其次是第二個捕獲組($2)中的至少一個非&字符(([^&]+))。

+0

它很好:)謝謝 – Gen4ik