我正在尝试编写一个适用于字符串的正则表达式:
2[23 3] + [1 22 3] + 7
[2] + [12351]
12[45 12]
[56]
[2] + 1 + [2]
但它也应该在字符串上抛出异常:
2[2 a]
1[2 3 4] + []
3[2 3 4] + a[1 2 3]
3[2 3 4] +
我编写了以下 RegEx 和代码,该代码会引发异常,其中包含有关错误位置的信息:
String sVariables = "(\\[(\\d+)(\\s+\\d+)*\\])";
String sMonomial = "((\\d+" + sVariables + "?)|" + sVariables + ")";
Pattern p = Pattern.compile(sMonomial + "(\\s+\\+\\s+" + sMonomial + ")");
Matcher m = p.matcher(sPolynomial);
if (m.find() && m.end() != sPolynomial.length())
throw new FileParseException(sPolynomial, m.end(), lineNumber);
else if (!m.find())
throw new FileParseException(sPolynomial, 1, lineNumber);
但我不知道为什么它不起作用,而且很难找到错误。所以问题是如何在 RegEx 中找到错误?如何正确测试它?是否有任何程序可以为我的 RegEx 生成输出以了解它是如何工作的?
更新:我想我应该写更多关于这个字符串的性质。RegEx 应该以特殊格式描述所有表示特殊类型多项式的字符串。格式是
- 多项式是用 + 分隔的单项式列表。(例如
m1 + m2 + m3
) - 单项式是一个数字,或用空格分隔的方括号中的数字列表,或者它可以同时包含数字和数字列表。(例如
2[1 2 3]
,2
,[2 3 4]
) - 所有其他字符串都应该被拒绝