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

时间:2014-07-15 16:23:21

标签: java regex matching

我看到类似的问题,但我仍然无法找到问题。如果您发现类似的问题,如果您能在评论中向我发送链接,我将不胜感激。

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

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

所以我需要一个可以在Java(Java的模式类)中使用的正则表达式,它可以匹配这些转义单引号和双引号字符。有什么建议?感谢。

如果需要进一步说明,请与我们联系。

3 个答案:

答案 0 :(得分:1)

尝试

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));
        }
    }

}

这里的想法是双引号(&#34;)和斜杠()可以使用斜杠()进行转义。所以如果你想逃脱并匹配\&#34;你可以在每个字符前面放一个斜杠()来制作\\&#34;。同样对于\'#它变成了\\&#39;。如果要将两者结合到一个正则表达式,可以使用管道(|)运算符。

答案 1 :(得分:0)

匹配报价:

Pattern,compile( "\"" );

匹配撇号:

Pattern.compile( "'" );

撇号的反斜杠逃避是没有意义的:它仍然是一个简单的撇号。

也许在Java中引用一点点游览,如果你有文本:He said, "Let's go!",它的Java表示为文字

"He said, \"Let's go!\""

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

答案 2 :(得分:-1)

您的大部分案例都可以与:

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

表示匹配\&#34;任何文字,然后\&#34;。不情愿的资格赛。*?将在下一个转义报价之前停止。它将匹配单引号或双引号。

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

它不能正确匹配的是另一个转义引用字符串(双引号)中的一个转义引用字符串(单引号)。但也许这不是你的必要案例。

相关问题