Java正则表达式可处理多种可能性

时间:2018-07-14 09:08:18

标签: java regex regex-group

我正在尝试为以下用户生成的可能性找到一个正则表达式:

  • ÷2%3%x#4%2$@

OR

  • ÷2%x#4%2$@

OR

  • ÷2%x#4$@

OR

  • ÷2%x@

要理解该表达式 ,它是一个分数,其分子位于 ÷和第一个%,分母从第一个%@。 但是,分母有一个指数,范围从#$

用户可以输入他/她想要的任何数字但结构保持不变。请注意,该数字也可以是小数。

结构如下:÷(一个数字,如果两个或两个以上的数字之间有一个%,则在两个数字之间)x(一个由数字组成的组,也符号#,$和%(s)也可以在数字之间交替显示)@

请记住,该数字可以是十进制数字。

我试图使用以下正则表达式失败:

"[÷]-?\\d+(\\.\\d*)?[%](-?\\d+(\\.\\d*)?){0,1}[x]([#]-?\\d+(\\.\\d*)?[$]){0,1}[@]"

我认为(-?\d+(\.\d*)?){0,1}组正在使事情复杂化。 另外,我还没有考虑到该组中可能发生的%

任何建议,谢谢

2 个答案:

答案 0 :(得分:0)

编辑:删除旧帖子内容。

根据您的新测试用例,我对您的正则表达式进行了改进以使其适合所有情况并简化了正则表达式:

4.0.1

注意:

2.0.2标记允许的字符组,因此没有括号。

另外,÷[0-9%]+?x(#[0-9%]+?\$)?@ OR ÷[\d%]+?x(#[\d%]+?\$)?@ []相同,示例中的第一部分与任何数字[÷][0-9]+[0-9[%]]+?匹配,然后检查÷[0-9]+[0-9%]+?是否存在n次(非贪婪抓取)。因此,您可以只对整个项目使用第二个检查。

通过将指数包装在正则表达式类中:0-9 n-times,我们可以使用(0-9 or %) ==>使整个指数为可选,这将使您的第4个测试用例起作用。

如果需要,您也可以将()替换为?

答案 1 :(得分:0)

我找到了一个有效的正则表达式,我从下至上进行了测试: 在这里:

[÷][0-9[%][\\.]]+?[x][0-9[%][\\.][#][$]]*?[@]

此正则表达式适用于所有类型的案例。即使那些包含十进制数字或不包含指数的数字。

组[0-9 [%] [\。] [#] [$]] *?允许正则表达式搜索可以出现零的指数(这就是为什么*)或更多次?使它成为可选的。同样,我也遵循相同的想法来计算x的系数(如果您不知道系数在哪里,请阅读该文章)和分子。感谢所有为解决这个问题而付出努力的人。我选择在编程时使用答案。