限制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.WhosebugError。我知道使用更大的 "XSS" 我可以解决这个问题,但我想问一下是否有优化正则表达式的方法?

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

如果 300th 单词是最后一个单词并且 it.You 之前没有 space 应该使用

,那么您的正则表达式将失败
^ *(?:\S+(?: +|$)){0,300} *$

我认为问题是因为 Pattern 的 Java 实现由于回溯而对组的每次重复使用堆栈。解决方案可能是按照其他人的回答改变您的方法,或者使所有量词都具有所有格:

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

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

有关详细信息,请参阅 here or here