限制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。
我需要一个在 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。