我正在编写一个正则表达式来解析包含标记字段的行。标签出现在等号之前,内容出现在等号后面,用单引号或双引号括起来。对于大多数字段,内容用单引号括起来。如果字段的内容包含单引号,则该字段用双引号括起来。 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])\=(?:(?:\"([^"])*\")|(?:\'([^']*)\'))
对于上述示例中标有 a 的字段, a =“'D08 / APPL'”,a与捕获组1匹配,并且捕获组2捕获尾随单引号。在这种情况下,我希望捕获组2捕获'D08 / APPL'。
答案 0 :(得分:1)
这是你想要的事情:
\w=(["'])((?:(?!\1).)*)\1
匹配并捕获引号 - '
或"
。然后它使用负向前看来匹配任何字符除了第一场比赛的引用。最后匹配匹配的报价;)
引号之间的所有内容都会被捕获到第二组。
修改强>
检查了您自己的尝试,唯一的错误是您将字符的量词放在组括号外的"
引用组中。即捕获仅包含最后一个字符不为"
。尝试:
([JK26PO7QaUSTVRW])\=(?:(?:\"([^"]*)\")|(?:\'([^']*)\'))
^ ^
/ \
Here Not here