Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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模式正则表达式减法_Java_Regex_String_Subtraction - Fatal编程技术网

带有贪婪量词的Java模式正则表达式减法

带有贪婪量词的Java模式正则表达式减法,java,regex,string,subtraction,Java,Regex,String,Subtraction,我目前正在尝试使用正则表达式来验证我的输入是否具有某种格式。 在可能的输入中,只有一个我不想匹配的字符组合。 因此,我想使用中描述的减法 [a-z&&[^bc]]a到z,b和c除外:[ad-z](减法) 因此,可以从表达式中排除特定的字符模式。 不幸的是,我没能正确使用正则表达式 该模式应匹配正好由8位数字组成的字符串([0-9]{8})。此外,它不应与正好包含8个零字符的字符串匹配 12345678->匹配是 00000001->匹配是 00000000->macth编号 我就是这样尝试的

我目前正在尝试使用正则表达式来验证我的输入是否具有某种格式。 在可能的输入中,只有一个我不想匹配的字符组合。 因此,我想使用中描述的减法

[a-z&&[^bc]]a到z,b和c除外:[ad-z](减法)

因此,可以从表达式中排除特定的字符模式。 不幸的是,我没能正确使用正则表达式

该模式应匹配正好由8位数字组成的字符串([0-9]{8})。此外,它不应与正好包含8个零字符的字符串匹配

  • 12345678->匹配是
  • 00000001->匹配是
  • 00000000->macth编号
我就是这样尝试的:regex=“[[0-9]{8}]&&&[^[0{8}]]

我现在的问题是,如何将多个角色组合在一起进行匹配

或者正则表达式必须看起来如何才能满足我的要求


如果有人能帮我,那就太好了。

那样的话,你最好有一个:

字符类始终匹配某个集合中的单个字符,并且该集合在方括号之间的表达式中定义,这就是为什么您的方法不起作用

[[0-9]{8}]&&[^[0{8}]]
实际上是指

[[0-9]{8} # Match 8 characters between 0 and 9 or a "["
]&&       # Match literal "]&&"
[^[0{8}]  # Match a character except "[", "0", "{", "8", or "}"
]         # Match a literal "]"
没有查找功能的解决方案必须确保至少存在一个非零位数,同时仍然确保总位数正好为8。这使得问题变得复杂:

^(?:[1-9][0-9]{7}|[0-9][1-9][0-9]{6}|[0-9]{2}[1-9][0-9]{5}|[0-9]{3}[1-9][0-9]{4}|[0-9]{4}[1-9][0-9]{3}|[0-9]{5}[1-9][0-9]{2}|[0-9]{6}[1-9][0-9]|[0-9]{7}[1-9])$
说明:

^#字符串的开头
(?:#小组开始
[1-9][0-9]{7}#匹配数字>0,后跟7位
|#或
[0-9][1-9][0-9]{6}#匹配任何数字,一个数字1-9,其他6个数字
|#或
[0-9]{2}[1-9][0-9]{5}#匹配两位数字,一位数字1-9,另外五位数字
|#或
等等等等等等。
)#小组结束
$#字符串末尾

如果内存可用,可以使用一对括号定义一组要匹配的字符。如果将组的值保存到以后不重要,请在开始时添加
?:
。您好,不幸的是,如果try:regex=“?:[[0-9]{8}]&&&[^[0{8}]],则无法工作。但也许我不明白你的意思。是的,我不是这个意思。不过,你最好还是听蒂姆的回答。太好了!谢谢你的帮助,很有效。没有其他解决办法了吗。或者你能告诉我为什么我的方法是错误的吗?@milius:当然还有其他的解决方案,但它们会更复杂。您的方法不起作用,因为字符类减法用于缩短类可以匹配的有效字符列表,而不是正则表达式可以匹配的有效字符列表-这就是查找断言的作用。另请参见我对上述正则表达式的解释。我将很快添加一个替代解决方案,向您展示为什么这种方法是最好的。
^(?:[1-9][0-9]{7}|[0-9][1-9][0-9]{6}|[0-9]{2}[1-9][0-9]{5}|[0-9]{3}[1-9][0-9]{4}|[0-9]{4}[1-9][0-9]{3}|[0-9]{5}[1-9][0-9]{2}|[0-9]{6}[1-9][0-9]|[0-9]{7}[1-9])$