正则表达式来捕获单引号或双引号内的字符串

问题描述:

我正在写一个正则表达式来解析包含标记字段的行。标签出现在等号前面,内容出现在等号后面,用单引号或双引号括起来。对于大多数字段,内容用单引号括起来。如果该字段的内容包含单引号,则该字段用双引号括起来。例如:正则表达式来捕获单引号或双引号内的字符串

J=''K='6'2='A'6='&JOBNAM#'P='&USERNAME#'O='1,1'7=''Q='ABC.JCLLIB(TEST1)'a="'D08/APPL'"U='1'S='*ALL'T='0'V='0'R='H'W='H' 

我的正则表达式除了用双引号括起来的字段外都适用。

([JK26PO7QaUSTVRW])\=(?:(?:\"([^"])*\")|(?:\'([^']*)\')) 

Test in Debuggex

Test in Regexr

对于像标记的所述一个字段在示例的以上,一个= “ 'D08/APPL'”,所述一个是通过捕获组匹配1,并且尾部单引号由捕获组2捕获。我希望捕获组2捕获'D08/APPL'在这种情况下。

难道这样的事情你以后:它匹配

\w=(["'])((?:(?!\1).)*)\1 

,并获取,报价 - 无论是'"。然后它使用负面展望来匹配任何字符,除了第一场比赛的报价。最后匹配的报价是匹配的;)

引号之间的所有内容都被捕获到第二组。

See it here at regex101

编辑

经过自己的努力,唯一的错误是,你放在量词的字符" -quoted组内的组括号外。即捕获只包含最后一个字符而不是"。试试:

([JK26PO7QaUSTVRW])\=(?:(?:\"([^"]*)\")|(?:\'([^']*)\')) 
           ^^ 
           / \ 
          Here  Not here 
+0

完美。使用负面展望的方法更加优雅。我稍微修改了一下,以便可以打印出现场标签。 '(\ w)=([“'])((?:(?!\ 2)。)*)(\ 2)' – mlowry

+0

很高兴为您提供帮助,如果您发现答案有用,以增加投票权有时候,不要成为[无名英雄](http://*.com/help/badges/226/unsung-hero);)。 – ClasG