如何在正则表达式中表示双引号字符(")?

20

我需要使用正则表达式来检查一个字符串是否以双引号字符 (") 开头并以双引号字符结束。

问题是我不能直接使用双引号字符,因为它会产生歧义。有没有其他方法在正则表达式中或一般字符串中表示双引号字符 "

String s = """;    // ?

2
可能是重复的问题:如何在字符串中输入引号? 或者 Java中在正则表达式中转义(使用)引号 或者... - Brian Roach
2个回答

36

首先,在正则表达式中,双引号字符并没有什么特殊的 - 它只是另一个字符,因此它不需要转义,从正则表达式的角度来看

但是,因为Java使用双引号来分隔字符串常量,所以如果您想在Java中创建一个带有双引号的字符串,就必须对它们进行转义。

以下代码将测试您的字符串是否匹配:

if (str.matches("\".*\"")) {
    // this string starts and end with a double quote
}
请注意,您不需要在正则表达式中添加输入标记的开始结束^$),因为matches()要求整个输入都匹配才返回true - ^$是隐含的。

3
一个有趣的用于匹配引号内文本的正则表达式,在xml标签中通常用于属性是 "[^"]*" (或者作为转义后的Java字符串,"\"[^\"]*\"")。无法被破坏 ;) - Nyerguds

10

你需要在句号前使用反斜杠 "\"。例如:\"

这里的文档可以看到:

一个紧随反斜杠后面的字符( \ )是转义序列,对编译器有特殊意义。

而双引号 " 是一个转义序列。

当在print语句中遇到转义序列时,编译器会相应地解释它。例如,如果您想在引号之间放置引号,则必须在内部引号上使用转义序列 \"。 要打印以下句子:

她对我说“你好!”。

您应该写成:

System.out.println("她对我说\"你好!\"")。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接