如何使用正则表达式从表达式字符串中提取* string *?

时间:2011-08-05 01:53:13

标签: java regex string

我有一个表达式字符串如下(整行作为字符串):

String s = prefix + "abc\"abc\"abc".toUpperCase();

我想使用正则表达式提取“abc \”abc \“abc”,该正则表达式在反斜杠不是字符串结尾后理解“双引号”。我该怎么做?非常感谢你!


最后

你们给了我一些提示,最后我想出来了,这是我的Java代码:

public class RegExpTest {

    private static final Pattern PATTERN = Pattern.compile("(([^\\\\]|^)\").*?([^\\\\]\")");

    public static void main(String[] args) {
        printStrings("He said \"Hello, \\\"\\\"\\\"\\\"name\\\"\", \"baby\"");
        printStrings("\"Go away and \\\"never\\\" come back!\" he said.");
        printStrings("\\\" outer \"inner\"");
    }

    private static void printStrings(String string) {
        System.out.println(string);
        System.out.println(extractStrings(string));
        System.out.println();
    }

    private static List<String> extractStrings(String string) {
        Matcher matcher = PATTERN.matcher(string);
        List<String> resultList = new ArrayList<String>();

        while (matcher.find()) {
            String group = matcher.group();
            if (!group.startsWith("\"")) {
                group = group.substring(1); // remove first non-double-quoter
            }
            resultList.add(group);
        }
        return resultList;
    }
}

输出如下:

He said "Hello, \"\"\"\"name\"", "baby"
["Hello, \"\"\"\"name\"", "baby"]

"Go away and \"never\" come back!" he said.
["Go away and \"never\" come back!"]

\" outer "inner"
["inner"]

谢谢大家。

3 个答案:

答案 0 :(得分:0)

您可以使用:

/".*?[^\]"/

到达第一个"之后的所有字符,直到下一个",但前面没有\

请注意,这也与""不匹配。因为引号之间必须至少有一个字符才能匹配。

答案 1 :(得分:0)

"((?:\\"|[^"])+)"

匹配\“首先,然后是任何非引用字符串.group(1)是内部字符串。

答案 2 :(得分:0)

我在Rad Software的Expression设计器中尝试了@PaperPRO的答案,但它对我的字符串不起作用。这可以使用我上面提到的工具处理您的输入。

\".+?(\\|\"){1}