正则表达式Java错误

时间:2011-10-29 07:54:19

标签: java regex

我无法在Java上运行这个正则表达式:

 String regex = "/^{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})}$/";

String data = "{m:\"texttexttext\",s:1231,r:23123,t:1}";
Pattern p = Pattern.compile(regex_Write_clientToServer);

Matcher a = p.matcher(data);

这与正则表达式网站的测试人员相同的正则表达式和相同的数据(如http://gskinner.com/RegExr/)工作正常!

3 个答案:

答案 0 :(得分:4)

两个问题:

  1. 在java中,(与perl等不同)正则表达式不包含在/个字符中
  2. 您必须逃避{文字:
  3. 试试这个:

    String regex = "^\\{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})\\}$";
    

答案 1 :(得分:3)

有两个问题:

  • 正斜杠不是模式本身的一部分,不应包括在内。
  • 你需要在开始和结束时逃避括号,否则它们将被视为重复量词。在其他正则表达式实现中可能不是这种情况,但在Java中肯定是这种情况 - 当我尝试只是删除斜杠时,我在Pattern.compile中得到了一个例外。

试试这个:

String regex="^\\{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})\\}$";

(适用于您的样本数据。)

顺便说一句,如果这是为了解析JSON,我个人尝试使用正则表达式 - 使用真正的JSON解析器。从长远来看,它会更加灵活。

答案 2 :(得分:0)

两件事: Java不要求你有任何类型的开始/结束字符。所以你可以删除/ chars

此外,如果要匹配它们,Java要求您转义任何正则表达式元字符。在你的情况下,大括号字符'{'和'}'需要在前面加一个双反斜杠(一个用于java转义,一个用于正则表达式转义):

"^\\{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})\\}$"