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

时间:2016-09-28 09:41:10

标签: regex

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

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

对于上述示例中标有 a 的字段, a =“'D08 / APPL'”,a与捕获组1匹配,并且捕获组2捕获尾随单引号。在这种情况下,我希望捕获组2捕获'D08 / APPL'

1 个答案:

答案 0 :(得分:1)

这是你想要的事情:

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

匹配并捕获引号 - '"。然后它使用负向前看来匹配任何字符除了第一场比赛的引用。最后匹配匹配的报价;)

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

See it here at regex101

修改

检查了您自己的尝试,唯一的错误是您将字符的量词放在组括号外的"引用组中。即捕获仅包含最后一个字符"。尝试:

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