2011-11-08 23 views
0

我有这样的文字,看起来像这样:Java的正则表达式讨论

executeRule(document, 'SendEmail', [ 
    'emailAddress':'EMAIL([email protected])', 
    'subject':'Test', 
    'text':'Test', 
    'defaultText':'Test'] 
); 

我需要为了得到该executeRule的参数用正则表达式解析它。

目前我正则表达式看起来像这样(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'rd参数。

任何帮助表示赞赏。

谢谢。

回答

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

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

+0

你不能用逗号使用分裂,因为第三个参数包含它。 – Zernike

+0

它很好用,谢谢 – Sergiu

+0

我怎样才能捕捉到甚至在方法的最后?截至目前,我匹配除了最后的整个方法; 谢谢 – Sergiu

5

你想过没有使用正则表达式一个做上述所有,但写一个简单的解析器拆分的逗号,然后授权给另一解析器解析每个冒号分隔的一对?构建/调试可能更容易(取决于您是否允许每个文本字符串中的逗号)。

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

+0

绝对!既然你知道你将有x个参数,并且它们将以逗号分隔,并且参数中不应该有逗号,这看起来像是一个非常好的解决方案,而不是一个过于复杂的正则表达式。 –

+0

executeRule方法可以在我的文本中发生多次,并且在这些executeRule方法之间可以有不相关的文本(例如 文本文本 executeRule(X,Y,Z); 文本文本 executeRule(X,Y,Z ); – Sergiu

+0

我最喜欢引用的一个 - 有些人,当遇到一个问题,认为“我知道,我将使用正则表达式。”现在他们有两个问题 – Dapeng