我需要一个正则表达式的帮助来匹配一个可能有嵌入式转义引号的带引号的字符串。
例如,给定字符串"'John\'s bike'"
。我开始使用的基本模式"'[^']*'"
,并使用lookbehind扩展它来否定嵌入式转义引号的情况不起作用:"'((?<\\)[^'])*'"
。
有人有想法吗?
该字符串可以是一系列引用的字符串,例如&#34;&#39; John的自行车&#39;玛丽的帽子&#39; ,&#39;我的鞋子&#39;&#34;,我想分别标记每个引用的子串。
答案 0 :(得分:1)
您可以接受引号之间的任何字符
\
'
。 所以你的正则表达式看起来像:
'(\\.|[^'])*'
在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'