当前位置: 首页 > 知识库问答 >
问题:

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

夏侯腾
2023-03-14

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

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])\=(?:(?:\"([^"])*\")|(?:\'([^']*)\'))

在Debuggex中测试

在Regexr中测试

对于上面示例中标记为a的字段,a=“'D08/APPL'”,a由捕获组1匹配,后面的单引号由捕获组2捕获。在本例中,我希望捕获组2捕获“D08/APPL”。

共有1个答案

鞠隐水
2023-03-14

你想要的是这样的东西吗:

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

它匹配并捕获一个引号-一个或一个。然后它使用负前瞻来匹配除第一个匹配的引号之外的任何字符。最后匹配的引号被匹配;)

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

在regex101这里看到它。

编辑

检查了您自己的尝试,唯一的错误是您将字符的量词放在引号内的组括号外。也就是说,捕获只包括最后一个不是的字符。尝试:

([JK26PO7QaUSTVRW])\=(?:(?:\"([^"]*)\")|(?:\'([^']*)\'))
                                  ^ ^
                                 /   \
                             Here     Not here
 类似资料:
  • 问题内容: 我写了一个正则表达式,用double-qoutes分割字符串: 如何将其扩展为与单双qoutes一起使用? 我试过了: 但这是行不通的 问题答案: 有两种方法:

  • 这是我之前问题的后续。我意识到我需要更具体地说明我的regex案例,以获得适用于我的案例的答案。 我已经与这个正则表达式斗争了很长一段时间(也使用我上一个问题的答案),我似乎无法构建我需要的东西。 我需要将所有字符串中出现的两个重复出现的单引号替换为(因此字符串内部意味着单引号)。这是因为在一种语言(语法)中,字符串中的引号使用<code>‘转义。 这里有一个例子(实际的例子可以包含用< code

  • 问题内容: 我有一个输入字符串 这个或“那个或”或“这个或那个” 应该翻译成 这个|| “那个或” || “这个或那个” 因此,尝试是在一个字符串中查找一个字符串(或)的出现并将其替换为另一个字符串(||)。我尝试了以下代码 输出是 这个|| “那个或” || ‘这个|| 那’ 问题是单引号内的字符串也被替换了。至于代码,样式仅是示例。当我开始工作时,我将编译模式并重用它。 问题答案: 试试这个正

  • 有没有一种方法使组的“capture”可以在regex后面引用,但其捕获的值不在匹配列表中返回? 或者其他一些方法来解决我(看似简单)的问题。

  • 我正在尝试匹配这些字符串: 单引号中不能包含双引号 双引号中没有双引号 单引号内的单引号-单引号只能包含内部的文本 我想出了以下正则表达式: 但它不起作用。

  • 我有一个应用程序收到一个格式错误的JSON字符串,如下所示: null 也可能是格式错误的JSON字符串: 在本例中,不应替换消息值中的单引号。