处理多个可能性的Java正则表达式
我正在尝试为以下用户生成的可能性找到正则表达式: ÷2%3%x4%2$@ 或 ÷2%x4%2$@ 或 ÷2%x4$@ 或 ÷2%x@ 要理解这个表达式,它是一个分子介于 和第一个%,分母从第一个%到@。 但是,分母有一个指数,从到美元 用户可以输入他/她想要的任何数字,但结构保持不变。请注意,数字也可以是十进制 结构如下:÷一个数字,如果其两个或两个以上的数字a%将位于由数字组成的digitsxa组之间,也包括符号,$和a%s,也可以在数字之间交替@ 记住,数字可以是十进制数 我尝试使用以下正则表达式,但没有成功:处理多个可能性的Java正则表达式,java,regex,regex-group,Java,Regex,Regex Group,我正在尝试为以下用户生成的可能性找到正则表达式: ÷2%3%x4%2$@ 或 ÷2%x4%2$@ 或 ÷2%x4$@ 或 ÷2%x@ 要理解这个表达式,它是一个分子介于 和第一个%,分母从第一个%到@。 但是,分母有一个指数,从到美元 用户可以输入他/她想要的任何数字,但结构保持不变。请注意,数字也可以是十进制 结构如下:÷一个数字,如果其两个或两个以上的数字a%将位于由数字组成的digitsxa组之间,也包括符号,$和a%s,也可以在数字之间交替@ 记住,数字可以是十进制数 我尝试使用以下正则
"[÷]-?\\d+(\\.\\d*)?[%](-?\\d+(\\.\\d*)?){0,1}[x]([#]-?\\d+(\\.\\d*)?[$]){0,1}[@]"
我认为组-?\d+\.\d*?{0,1}正在使事情复杂化。
此外,我还没有说明这一组中可能出现的百分比
任何建议,谢谢编辑:删除旧帖子内容
根据您的新测试用例,我改进了您的正则表达式以匹配所有用例,并简化了正则表达式:
÷[0-9%]+?x(#[0-9%]+?\$)?@ OR ÷[\d%]+?x(#[\d%]+?\$)?@
注:
[]标记允许的字符组,因此括号没有用处
也[÷][0-9]+[0-9[%]+]?与÷[0-9]+[0-9%]+相同吗?示例中的第一部分匹配任意数字0-9 n次,然后检查0-9或%是否为n次非贪婪抓取。所以你可以用第二张支票来检查整件事
通过将指数包装在正则表达式类中:我们可以使用?==>这将使您的第四个测试用例正常工作
如果需要,您也可以用\d任何数字替换0-9。我发现了一个有效的正则表达式,我自下而上进行了测试: 这是:
[÷][0-9[%][\\.]]+?[x][0-9[%][\\.][#][$]]*?[@]
此正则表达式适用于所有类型的情况。甚至那些包含十进制数或不包含指数的数字
组[0-9[%][\.][$]]*?允许正则表达式搜索指数,指数可能出现零这就是为什么*有或更多次和?使它成为可选的。类似地,我也遵循了同样的想法,如果你不知道系数和分子的位置,那么就阅读文章。感谢大家为这个问题进行头脑风暴。我已选择使用我的答案进行编程。什么是有效/无效输入?您为什么不。。。。只是不使用正则表达式?你说不使用正则表达式是什么意思@user202729有效输入是我在顶部列出的可能性@luk2302如果不使用正则表达式,只使用input.equalsfirsthing | | | | input.equalsecondthing | input.equalsfirdthing.Muller以下输入无效:÷3%4%x%2%0$@我更新了答案。如果你能写下所有可能的规则并把它放到你的问题中,那将是最好的。我不知道语法,所以很难把它弄对。这个匹配的÷a_b_c%%不确定wanted@Toto我知道。但只要我对什么是有效的,什么是无效的没有任何规定,我就无法改进我的答案。@I_o解决你的问题,目前还不可能帮助你。如果需要帮助,请提供语法。像这样:数字%或者正好是1个timenumber等等。你能用文字表达吗?这对我有很大帮助。你的测试用例失败了吗?至少对我来说是这样。为什么对单个字符使用组?或者这是测试用例???再试一次。。唯一会失败的是最后一个测试用例。Muller和第一个测试用例不应该以零开始。最后一个测试用例。。这很容易克服。但是,上面的正则表达式适用于所有其他的正则表达式。你能在正则表达式101中告诉我你是如何匹配它的吗?这对我不起作用。即使是第一个病例也不匹配。