我創建了一個 java 正則運算式
(?=\b((?<![^\p{Alnum}\p{Punct}])(?:\p{Alnum} \p{Punct}\p{Alnum} ){2})\b)
我針對示例字串測驗了這個正則運算式:https: //www.google.com.google.com
它給了我所有預期的令牌:
www.google.com google.com.google com.google.com
但是,上述正則運算式的問題在于,在使用大字串進行測驗時會花費大量時間。
我預期的標記是“字母數字標點符號字母數字”的形式。
如何優化這個正則運算式?
uj5u.com熱心網友回復:
您需要像這樣簡化正則運算式:
(?=\b((?:\p{Alnum} \p{Punct}){2}\p{Alnum} )\b)
請參閱正則運算式演示。
詳情:
\b- 單詞邊界((?:\p{Alnum} \p{Punct}){2}\p{Alnum} )- 第 1 組:(?:\p{Alnum} \p{Punct}){2}- 一個或多個字母/數字和一個標點符號出現兩次,然后\p{Alnum}- 一個或多個字母/數字
\b- 單詞邊界
請注意,每個后續模式不會在字串內的同一位置匹配,這使其盡可能高效(不過,重疊模式的性能并不是那么好,因為它們必須從左到右評估字串內的每個位置)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/481967.html
