簡體   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