在Java中使用正则表达式将字符串与转义引号匹配时遇到问题

在Java中使用正则表达式将字符串与转义引号匹配时遇到问题,java,regex,matching,Java,Regex,Matching,我看到了与我类似的问题,但我仍然找不到问题所在。如果你发现一个类似的问题,我将不胜感激,如果你能给我在评论中的链接 我正在尝试为转义双引号(\“)和单引号(\”)匹配文本文件的内容。原因是我必须提取引号中的所有内容并将其粘贴到另一个文本文件中。这就是我的文本文件(需要比较)的外观: <pre> string0 = "Report: \n"; string1 = "File1 Name: \"Inferno\" \tFile2 Name: \"Gollum\"";

我看到了与我类似的问题,但我仍然找不到问题所在。如果你发现一个类似的问题,我将不胜感激,如果你能给我在评论中的链接

我正在尝试为转义双引号(
\“
)和单引号(
\”
)匹配文本文件的内容。原因是我必须提取引号中的所有内容并将其粘贴到另一个文本文件中。这就是我的文本文件(需要比较)的外观:

<pre>
    string0 = "Report:   \n";
    string1 = "File1 Name: \"Inferno\" \tFile2 Name: \"Gollum\"";
    string2 = "Similarities: \'parameter1\' \t \'parameter3\' \t \'parameter4\'";
    string3 = "Differences: \'parameter2\'";
</pre>

string0=“报告:\n”;
string1=“文件名:\“地狱\”\t文件名:\“咕噜\”;
string2=“相似性:\'parameter1\'\t'parameter3\'\t'parameter4\'”;
string3=“差异:\'parameter2\'”;
所以我需要一个在Java(Java的模式类)中工作的正则表达式,它可以匹配这些转义单引号和双引号字符。有什么建议吗?谢谢

如果需要进一步解释,请告诉我。

要匹配报价:

Pattern.compile( "'" );
要匹配撇号,请执行以下操作:

"He said, \"Let's go!\""
撇号的反斜杠转义是毫无意义的:它仍然是一个简单的撇号

如果你有文本:
他说,“我们走吧!“
,其作为文本的Java表示为

 "((\\\".*?\\\")|(\\\'.*?\\\'))"

如果此字符序列存储在字符串对象中,则可以使用上面给出的正则表达式匹配引号和撇号。字符串不包含反斜杠字符。

大多数大小写都可以与以下内容匹配:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class QuotesPattern {

    static Pattern DOUBLE_QUOTES = Pattern.compile("\\\"(.+?)\\\"");
    static Pattern SINGLE_QUOTES = Pattern.compile("\\\'(.+?)\\\'");

    public static void main(String[] args) {
        String string0 = "Report:   \n";
        String string1 = "File1 Name: \"Inferno\" \tFile2 Name: \"Gollum\"";
        String string2 = "Similarities: \'parameter1\' \t \'parameter3\' \t \'parameter4\'";
        String string3 = "Differences: \'parameter2\'";

        printValues(string0);
        printValues(string1);
        printValues(string2);
        printValues(string3);
    }

    private static void printValues(String string) {
        Matcher doubleQuotesMather = DOUBLE_QUOTES.matcher(string);
        while(doubleQuotesMather.find()) {
            System.out.println(doubleQuotesMather.group(1));
        }

        Matcher singleQuotesMatcher = SINGLE_QUOTES.matcher(string);
        while(singleQuotesMatcher.find()) {
            System.out.println(singleQuotesMatcher.group(1));
        }
    }

}
表示匹配\“任意文本,然后\”。不情愿的限定符。*?将在下一个转义引号之前停止。它将匹配单引号或双引号

只需使用find,然后使用group(1)来获取文本(包括转义符和引号)

它不能正确匹配的是一个转义引号字符串(单引号)与另一个转义引号字符串(双引号)之间的匹配。但这可能不是您必须的情况。

试试看


这里的想法是双引号(“)和斜杠()都可以用斜杠()转义。因此,如果您想转义并匹配\“您可以在每个字符前面放置一个斜杠(),使\”。类似地,对于\“它变成\”。如果你想将这两个字符组合成一个正则表达式,你可以使用pipe(|)操作符。

你想匹配文本的哪一部分?@anubhava我想匹配每个
字符串。
变量
前面的反斜杠的累积是无用的;在双引号模式中,一个反斜杠就足够了:
“\”(.+?)\”“
。同样,您可以省略模式单引号中的所有反斜杠:
“'(.+?)”
。试试看!由于无意义的反斜杠累积而被否决。请参阅其他地方的评论。@laune再次阅读OP帖子-他特别希望捕获包含反斜杠的条目。示例包括未捕获的不带反斜杠的引号。你因为错误地阅读了问题而投了反对票。
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class QuotesPattern {

    static Pattern DOUBLE_QUOTES = Pattern.compile("\\\"(.+?)\\\"");
    static Pattern SINGLE_QUOTES = Pattern.compile("\\\'(.+?)\\\'");

    public static void main(String[] args) {
        String string0 = "Report:   \n";
        String string1 = "File1 Name: \"Inferno\" \tFile2 Name: \"Gollum\"";
        String string2 = "Similarities: \'parameter1\' \t \'parameter3\' \t \'parameter4\'";
        String string3 = "Differences: \'parameter2\'";

        printValues(string0);
        printValues(string1);
        printValues(string2);
        printValues(string3);
    }

    private static void printValues(String string) {
        Matcher doubleQuotesMather = DOUBLE_QUOTES.matcher(string);
        while(doubleQuotesMather.find()) {
            System.out.println(doubleQuotesMather.group(1));
        }

        Matcher singleQuotesMatcher = SINGLE_QUOTES.matcher(string);
        while(singleQuotesMatcher.find()) {
            System.out.println(singleQuotesMatcher.group(1));
        }
    }

}