我是正则表达式的新手,我需要找到一个匹配一个或多个数字的正则表达式[1-9]只有一个'|'标志,一个或多个'*'符号和零个或多个','符号。
字符串不应包含任何其他字符。 这就是我所拥有的:
if(this.ruleString.matches("^[1-9|*,]*$"))
{
return true;
}
是否正确?
谢谢,
维奈
答案 0 :(得分:4)
不,试试这个:
"^[1-9]+\\|\\*+,*$"
答案 1 :(得分:4)
我认为你应该为每种类型的符号单独测试,而不是编写复杂的表达式。
首先,测试您没有无效符号 - "^[0-9|*,]$"
然后测试数字"[1-9]"
,它应该匹配至少一个。
然后测试"\\|"
,"\\*"
和"\\,"
并检查匹配数量。
如果所有测试都通过,则您的字符串有效。
答案 2 :(得分:0)
请给我们至少10个可能匹配的匹配字符串,以及您要拒绝的10个字符串,并告诉我们这是否必须保留一些顺序或顺序无关紧要。所以我们可以制作一个可靠的正则表达式。
到目前为止,我所能提供的只是:
^[1-9]+\|{1}\*+,*$
此RegEx针对这些示例字符串进行了测试,接受了它们:
56421|*****,,,
2|*********,,,
1|*
7|*,
18|****
123456789|*
12|********,,
1516332|**,,,
111111|*
6|*****,,,,
它针对这些样本字符串进行了测试,拒绝了它们:
10|*,
2***525*|*****,,,
123456,15,22*66*****4|,,,*167
1|2*3,4,5,6*
,*|173,
|*,
||12211
12
1|,*
1233|54|***,,,,
我认为您的订单是严格的,所有条件同时适用。
答案 3 :(得分:0)
看起来你需要的模式是
n-n,用逗号分隔一次或多次
然后一个酒吧(|)
然后n * n,用逗号分隔一次或多次。
这是一个正则表达式。
([1-9]{1}[0-9]*\-[0-9]+){1} (,[1-9]{1}[0-9]*\-[0-9]+)* \| ([1-9]{1}[0-9]*\*[0-9]+){1} (,[1-9]{1}[0-9]*\*[0-9]+)*
但它太复杂了,并没有考虑到细节,例如 对于n-m的情况,你想要的 小于m (我猜)。 并且您可能希望在条形之前使用相同数量的n-m,并且在条形之后需要x * y。
取决于您是否要完全检查语法。 (我希望你能这么做。)
由于这非常复杂,因此应使用一组代码而不是单个正则表达式来完成。
答案 4 :(得分:-1)
这个正则表达式应该可行
"^[1-9\\|\\*,-]*$"