2010-09-20 121 views
1

我开发了一个UI,允许用户定义正则表达式模式,然后使用由appendReplacement()使用的替换字符串。测试Java正则表达式appendReplacement()

例如

  • 模式 - (。*)7
  • 更换模式 - 新台币$ 30

所以71234将产生1234

反正我有可以验证输入模式和替换模式是不需要用户输入匹配的字符串就可以兼容?例如,如果替换模式是$1$2那么这会在运行时引发异常。我可以提前检查吗?

编辑:

最终的解决办法是做的aioobe建议,并通过创建一个虚拟匹配器拿到小组数(不知道为什么这种方法不是对模式TBH),然后手动解析字符串替换手动找到哪些$组引用存在。有点烦躁,但有效。

回答

2

嗯,你可以这样做:

yourPattern.matcher("").groupCount(); 

groupCount()将返回捕获组(其中至少可以被认为是什么样的用户可以参考上限)的数量。

+0

谢谢,我可以然后验证对替换模式,以确保$ 2不存在,如果只有一个组? – 2010-09-20 10:00:56

+0

是的。这似乎是一个好主意。 – aioobe 2010-09-20 10:45:10

+0

请注意,仍然可能存在基于正在匹配的实际文本评估为空的组。例如,模式'(a)|(b)'有2个组,但只有其中一个与文本匹配。 – Avi 2010-09-20 11:57:40