Java 正则表达式限制为300字
我需要一个正则表达式,成功0-300字,失败301字或更多 我试过: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个字是最后一个字并且前面没有空格,则正则表达式将失败。您应该使用 ^ *(?:\
^\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}+$