Java Regex讨论

时间:2011-11-08 11:23:47

标签: java regex

我的文字如下:

executeRule(document, 'SendEmail', [
    'emailAddress':'EMAIL(john@yahoo.com)',
    'subject':'Test',
    'text':'Test',
    'defaultText':'Test']
);

我需要用regexp解析它以获取executeRule的参数。

目前我的regexp看起来像这样(java):

List<String> partialRules = new ArrayList<String>();
        List<String> rules = new ArrayList<String>();
        Pattern p = Pattern.compile("executeRule\\(\\s*\\w+,\\s*'(\\w+)'\\s*,\\.*");

问题是我找不到与executeRule方法的第3个参数匹配的正则表达式。

感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:5)

您是否考虑过不使用一个正则表达式来完成上述所有操作,而是编写一个简单的解析器来分割逗号,然后委托另一个解析器来解析每个冒号分隔的对?构造/调试可能更容易(当然,取决于您是否允许在每个文本字符串中使用逗号)。

如果您选择扩展上面的语法,那么这可能比一个(可能相当大的)正则表达式更具可扩展性。

答案 1 :(得分:1)

Pattern p = Pattern.compile("(?s)executeRule\\(\\s*?(.+?),\\s*?('.+?'),\\s*(\\[.+?\\])");

如果我理解你想要什么。每个参数都将保存在Matcher的组(i)中。