Java 正则表达式匹配带有嵌入转义引号的引号字符串

Java regex to match quoted string with embedded escaped quote

我需要有关正则表达式的帮助,以匹配可能包含嵌入式转义引号的带引号字符串。

例如,给定字符串"'John\'s bike'"。我开始使用的基本模式 "'[^']*'",并将其扩展为否定使用后向嵌入转义引号的情况不起作用:"'((?<\)[^'])*'"

有人知道吗?

该字符串可以是一系列带引号的字符串,例如“'John\'s bike'、'Mary\'s hat'、'my shoes'”,我想对每个字符串进行标记化分别引用的子字符串。

您可以接受引号之间的任何字符

  • 前面有 \
  • 不是'

因此您的正则表达式可以如下所示:

'(\.|[^'])*'

在 Java 中应该看起来像 "'(\\.|[^'])*'" (要在正则表达式中创建 \ 文字,我们需要像 \ 一样转义它,但同样的规则适用于字符串文字所以我们需要再次转义这两个 \ 这最终给了我们 "\\")

基于您的示例的演示:

String input = "'John\'s bike', 'Mary\'s hat', 'my shoes'";
Pattern p = Pattern.compile("'(\\.|[^'])*'");
Matcher m = p.matcher(input);
while(m.find()){
    System.out.println(m.group());
}

输出:

'John\'s bike'
'Mary\'s hat'
'my shoes'