正则表达式匹配一个或多个数字1-9,一个'|',一个或多个'*'和零个或多个','

时间:2011-04-08 04:09:57

标签: java regex string

我是正则表达式的新手,我需要找到一个匹配一个或多个数字的正则表达式[1-9]只有一个'|'标志,一个或多个'*'符号和零个或多个','符号。

字符串不应包含任何其他字符。 这就是我所拥有的:

if(this.ruleString.matches("^[1-9|*,]*$"))  
{  
    return true;  
}

是否正确?
谢谢,
维奈

5 个答案:

答案 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\\|\\*,-]*$"
  • 在字符串«^»
  • 的开头处断言位置
  • 匹配下面列表中的单个字符«[1-9 \ | *, - ] »
    • 在零和无限次之间,尽可能多次,根据需要回馈(贪婪)«»
    • “1”和“9”«1-9»
    • 之间范围内的字符
    • A |字符«\ |»
    • A *字符«*»
    • 字符“,”«,»
    • 字符“ - ”« - »
  • 断言字符串末尾的位置(或在字符串末尾的换行符之前,如果有的话)«$»