2017-08-07 75 views
1

我必須用逗號這樣分隔值的列表:捕捉逗號

bDestruction =真,bEmissionAlarme =假bActionReinit =假sNatureData =「蘇爾 évènementprovenant d」 ALIS甌SGP - 法分BJ,IJ甌 GMO」,sCodeMsgExpliControle = 「MSG-G00033_P_ALIM_ME」

我想捕捉兩個參數和價值,所以我做了這個表達式:

(?:([^=]*))="?([^,]*)(?:"|,)? 

但是,由於它在大多數情況下都能正常工作,所以他不提供此示例,因爲sNatureData後面的文本包含逗號。所以正則表達式認爲它是一對夫婦{參數=值}的結束並拋出一個錯誤。

可以做些什麼? 在此先感謝。

+0

我想你可能要考慮在這裏使用的解析器。逗號內容被正確引用,以讓我們知道引號內的內容不應被視爲分隔符。也許你可以給我們更多的背景知道這些鍵/值出現在哪裏? –

+0

當然,我需要捕捉到注入數據在表中,與INSERT INTO TABLE(參數)VALUES(值) – v01dv01d

+0

您可能想看看以下:https://stackoverflow.com/questions/1293147/javascript-code -to-parse-csv-data – zerohero

回答

1

我建議你按照評論給你的建議,而不是使用正則表達式。

但是,如果你真的需要這樣做使用正則表達式,下面應該做的伎倆:

(.*?)=("?)([^"]+?)\2(?:,|$) 
  • (.*?)=抓住了關鍵=標誌的左側。它只捕獲一個鍵,因爲?使它匹配儘可能少的字符。
  • ("?)捕獲值是否在引號中。
  • ([^"]+?)\2(?:,|$)
    • ([^"]+?)捕獲超過1個字符,是不是",但儘可能少。
    • \2(?:,|$)如果有報價並且它再次找到一個,或者在下一個逗號或者字符串已經完成,則停止。

Test online

+0

說實話,我幾乎是新來的正則表達式和\ 2是我迄今爲止搜索的東西。 非常感謝您的回答,祝您有個愉快的一天。 – v01dv01d

+0

@ v01dv01d非常歡迎您! – SchoolBoy