如何处理正则表达式中的'和'字符?

时间:2014-06-18 17:42:59

标签: java regex

我正在尝试使用此正则表达式匹配某些短语

String k = "{'hello','hi'}";
Pattern pattern = Pattern.compile("(\\{)(((([A-Za-z0-9_()\'\"\\.\\+\\-\\*/])+((,)?([A-Za-z0-9_()\\+\\-\\*/]))*)|(\\w)))?(\\})");


Matcher match = pattern.matcher(k);
System.out.println(match.matches());

它适用于我指定的所有字符,这意味着它匹配{1,2}{1+3,method()}等等.... 只有当我收到"字符串或'内的"{"hello","hi"}"字符串时,似乎正则表达式才会识别此字符。

有没有一种特殊的方式来抓住它们?

3 个答案:

答案 0 :(得分:2)

您可以使用\ example \'转义字符。 ='和\" ="

我宁愿使用[^}]和[^,],这会获得除特定字符之外的所有内容。

答案 1 :(得分:0)

我认为这个问题可能与您的正则表达式有关,而不是特别是'和'字符。包含更多字段的第二个块缺少一些字符(特别是'和'字符),所以它没有捕获'嗨'有效。您正在通过在它们前面加一个“\”来正确处理这些字符以逃避它们(给你“和”)。

我已经使用您的示例({'hello','hi'})测试了以下正则表达式,并且它正确地拾取了文本。

({)(((([A-Za-z0-9_()\'\"\\.\\+\\-\\*/])+((,)?([A-Za-z0-9_()\'\"\\.\\+\\-\\*/]))*)|(\\w)))?(})

如果您需要任何关于正则表达式的帮助,或者想要一种更简单的方法来测试和调试您的正则表达式,我建议使用网站Regexr。无论何时使用正则表达式,它都是一个很好的可视化工具。我使用此工具检查您的初始正则表达式,以找出正在拾取的正则表达式的哪个部分,然后解决问题。

答案 2 :(得分:0)

如果您总是试图在大括号内阻止元组,那么您的正则表达式可以简化一点:

String k = "{'hello','hi'}";
Pattern pattern = Pattern.compile("\\{(.*),(.*)\\}");
Matcher match = pattern.matcher(k);
System.out.println(match.matches());
System.out.println(match.group(1));
System.out.println(match.group(2));

打印:

true
'hello'
'hi'

此外,由于Java的正则表达式解析器可能会认识到领先的' {'和尾随'}'不是正则表达式区间说明符的一部分,它们不会被视为元字符。因此,可以删除反斜杠并将正则表达式修剪为:

Pattern pattern = Pattern.compile("{(.*),(.*)}");