Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式匹配一个或多个数字1-9,一个'|';,一个或多个'*&引用;零个或多个'';_Java_Regex_String - Fatal编程技术网

Java 正则表达式匹配一个或多个数字1-9,一个'|';,一个或多个'*&引用;零个或多个'';

Java 正则表达式匹配一个或多个数字1-9,一个'|';,一个或多个'*&引用;零个或多个'';,java,regex,string,Java,Regex,String,我不熟悉正则表达式,我需要找到一个正则表达式,它匹配一个或多个数字[1-9],只匹配一个“|”号、一个或多个“*”号和零个或多个“,”号 字符串不应包含任何其他字符。 这就是我所拥有的: if(this.ruleString.matches("^[1-9|*,]*$")) { return true; } 是否正确? 谢谢, Vinay不,试试这个: "^[1-9]+\\|\\*+,*$" 这个正则表达式应该有效 "^[1-9\\|\\*,-]*$" 断言字符串«^

我不熟悉正则表达式,我需要找到一个正则表达式,它匹配一个或多个数字[1-9],只匹配一个“|”号、一个或多个“*”号和零个或多个“,”号

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

if(this.ruleString.matches("^[1-9|*,]*$"))  
{  
    return true;  
}
是否正确?
谢谢,
Vinay不,试试这个:

"^[1-9]+\\|\\*+,*$" 
这个正则表达式应该有效

"^[1-9\\|\\*,-]*$"
  • 断言字符串«^»开头的位置
  • 匹配以下列表中的单个字符«[1-9\|*,-]»
    • 在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)«»
    • 介于“1”和“9”«1-9»之间的字符
    • 一个|字符«\ |»
    • A*字符«*»
    • 字符“,”«,»
    • 字符“-”«-»
  • 断言字符串末尾的位置(或字符串末尾的换行符之前,如果有)«$»

我认为您应该分别测试每种类型的符号,而不是编写复杂的表达式

首先,测试您没有无效符号-
“^[0-9 |*,]$”

然后测试数字
“[1-9]”
,它应该至少匹配一个

然后测试
“\\\”
“\\*”
“\\”、“
并检查匹配数


如果所有测试都通过,那么您的字符串是有效的。

请给我们至少10个您希望接受的匹配字符串,以及10个您希望拒绝的匹配字符串,并告诉我们这是否必须保持某些顺序或其顺序无关紧要。所以我们可以制作一个可靠的正则表达式

到目前为止,我所能提供的只有:

^[1-9]+\|{1}\*+,*$
此正则表达式针对这些样本字符串进行测试,并接受它们:

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|***,,,,  
对这些样本串进行了测试,拒绝了它们:

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|***,,,,  

我假设您给定的顺序是严格的,所有条件同时适用。

看起来您需要的模式是

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]+)* ([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的情况,您需要 n小于m (我猜)。 你很可能想要相同数量的n-m在条前,x*y在条后

取决于是否要完全检查语法。 (我希望你愿意。)


因为这太复杂了,所以应该用一组代码而不是一个正则表达式来完成。

为什么不自己测试一下呢?你能提供一个字符串示例吗?我猜你已经测试过了,你的问题只是问它应该是什么样子的?不清楚。你是在测试这些东西的和,还是它们的或?在这两种情况下,这里都有一个提示:其中一些是特殊字符。>一个或多个数字[1-9]只有一个“|”号,一个或多个“*”号和零或多个“,”-完全按照这个顺序,或者它们可以混合使用?尽管我通常会回答问题,+1指出有时一个正则表达式根本不是最好的方法。如果顺序不重要(如果不仅“12 |*,”而且“3,|*12”应该匹配),这是正确的,如果字符串的部分应该按照问题中提到的顺序,这也是正确的。这也允许例如“|||||||”,OP只需要1 |和10个以上的“*”。请不要使用
{1}
。它唯一的作用就是弄乱你的正则表达式。艾伦,我同意。我想我是被量词缠住了!