不匹配正则表达式中的转义字符

时间:2016-12-08 15:02:11

标签: java regex

我有一些字符串,在阳光灿烂的日子里看起来像

'abcd' => 'efgh'

我希望在

等捕获组中获得abcdefgh
"'([^']*)'\s*=>\s*'([^']*)'"

我现在的问题是,那个=>或者\\'可能出现在捕获序列中。我已经尝试了

"'([^']|[\\\\^]*)'\s*=>\s*'([^']|[\\\\']*)'"

但这并没有让我达到预期的效果。 如何过滤掉那些值?

2 个答案:

答案 0 :(得分:2)

当涉及解析文本时,正则表达式不是正确的选择。

解析例如包括计算反斜杠,引号等功能。

使用解析器库(如 ANTLR ),或使用半健壮的正则表达式解决方案。

答案 1 :(得分:0)

如果你想在" =>"之前和之后获得这些字符串。你可以用这个:

String s = "'ab'cd' => 'e\\fg\\'h'";

Pattern p = Pattern.compile("'(.+)'\\s\\=>\\s'(.+)'");
Matcher m = p.matcher(s);

if (m.matches()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}

你会得到" ab' cd"和" e \ fg \' h"在这个具体案例中。