【发布时间】:2011-06-12 22:28:35
【问题描述】:
我尝试使用 java 解析规则并使用 RegEx 读取其中的任何内容,但由于我对 RegEx 非常陌生,因此发现了几个问题。
首先,我尝试用这个RegEx解析一个谓词(我不知道这是否太复杂):"([a-zA-Z]+)\\(([\\?]?[a-zA-Z0-9]+)?(,[\\?]?[a-zA-Z0-9]+)*\\)",我刚刚发现这是完全错误的......谓词应该是这样的(我懒得写完整的表达式),p(), p(?a), p(?a,?b,c,?d)。谓词名称必须是字符串(仅包含字母字符),参数是仅包含字母字符或以 ? 开头的字符串。
这里我发现了两个问题,给定元素p(a,b,c):
- 当我循环查看每个组的元素时(使用
Matcher),结果只有p(a,b,c)、p、a和,c,我该如何检索@987654330 @也? - 如何在组内不包含
,(逗号符号),注意重复时也要包含它?
另外一种情况,当我输入p()时,为什么会得到一个元素为null的组?
知道如何解决这个问题吗?
【问题讨论】:
-
仅供参考:您的正则表达式实际上非常好。
-
附带说明,如果您打算做很多复杂的语言匹配,您可能需要考虑使用解析器,例如 ANTLR 或 JavaCC,而不是正则表达式。一个实际的解析器+词法分析器可以比正则表达式更容易地处理更多的事情。
标签: java regex repeat capturing-group