【问题标题】:Regex to capture string inside single or double quotation marks正则表达式捕获单引号或双引号内的字符串
【发布时间】:2016-09-28 09:41:10
【问题描述】:

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

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'

【问题讨论】:

    标签: regex


    【解决方案1】:

    你追求的是这样的吗:

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

    它匹配并捕获引用 - '"。然后它使用否定前瞻来匹配任何字符除了第一次匹配的引号。最后匹配一个匹配的报价;)

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

    See it here at regex101.

    编辑

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

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

    【讨论】:

    • 完美。您使用负面展望的方法更加优雅。我稍微修改了一下,以便可以打印出字段标签。 (\w)=(["'])((?:(?!\2).)*)(\2)
    • 很高兴为您提供帮助。如果您发现答案有用,您始终可以投票。有时不成为an unsung hero 也很好;)。
    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多