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 正则表达式限制为300字_Java_Regex_Exception_Stack Overflow - Fatal编程技术网

Java 正则表达式限制为300字

Java 正则表达式限制为300字,java,regex,exception,stack-overflow,Java,Regex,Exception,Stack Overflow,我需要一个正则表达式,成功0-300字,失败301字或更多 我试过: ^\s*(\S+\s+){0,300}\S*$ 我也查过了 ^\W*(?:\w+\b\W*){0,300}$ 两者都工作正常,但在Java中我得到了一个Java.lang.StackOverflower错误。我知道使用更大的“XSS”可以解决这个问题,但我想问一下是否有办法优化正则表达式?您可以使用字符串。拆分并检查返回数组的大小。如果第300个字是最后一个字并且前面没有空格,则正则表达式将失败。您应该使用 ^ *(?:\

我需要一个正则表达式,成功0-300字,失败301字或更多

我试过:

^\s*(\S+\s+){0,300}\S*$
我也查过了

^\W*(?:\w+\b\W*){0,300}$

两者都工作正常,但在Java中我得到了一个Java.lang.StackOverflower错误。我知道使用更大的“XSS”可以解决这个问题,但我想问一下是否有办法优化正则表达式?

您可以使用
字符串。拆分
并检查返回数组的大小。

如果
第300个
字是最后一个字并且前面没有
空格,则正则表达式将失败。您应该使用

^ *(?:\S+(?: +|$)){0,300} *$

我相信问题是因为模式的Java实现由于回溯的原因,每次重复一个组都会使用一个堆栈。解决方案可能是改变你的方法,就像其他人回答的那样,或者让所有量词都具有所有格:

^\s*(\S+\s+){0,300}+\S*$


有关更多信息,请参阅或。

“两者都工作正常,但在Java中我得到了一个“Java.lang.StackOverflower错误”嗯,它们怎么会“工作正常”并引发异常?抱歉,你说得对。。。如果我在一个在线正则表达式工具(如Java)中测试,它们都可以很好地完成工作,但在Java中它们不工作,因此您需要使用它显示代码,因为这可能是问题所在。我不能,我使用的是约束框架。编写自己的代码会非常复杂(可能是最后的手段)。你知道正则表达式是否可以改进吗?
String.split
是标准Java的一部分-什么意思?我使用hibernate约束,不能添加自定义Java代码。只有正则表达式的变化…应该在你的问题中提到这一点,并适当地标记它
^\W*(?:\w+\b\W*){0,300}+$