繁体   English   中英

正则表达式限制300个单词

[英]regular expression to limit 300 words

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

我试过了:

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

我也检查过

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

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

我认为问题在于,由于回溯,Pattern的Java实现会为每次重复组使用一个堆栈。 解决方案可能是在其他人已经回答时改变您的方法,或者使所有量词都具有占有性:

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

要么

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

有关详细信息,请参阅此处此处

您可以使用String.split并检查返回的数组的大小。

如果第300th单词是最后一个单词并且前面没有space ,那么你的正则表达式将失败。你应该使用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM