2017-08-07 68 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