[英]Java: Splitting a string by whitespace when there is a variable number of whitespaces between words?
[英]Regex that fail when there excessive whitespaces between words
我試圖在Java中創建一個正則表達式,該正則表達式與單詞之間的多余空格以及開頭和結尾的空格不匹配。
到目前為止,我已經完成了此正則表達式
^[\\S].*[\\S]$
當行的開頭和結尾有空格時,該操作將失敗
但是單詞之間的多余空格怎么辦?
我希望這條線失敗:
"test test"
但這不是:
"test test"
我嘗試了這個:
^[\\S].*(?![\\s]{2,}).*[\\S]$
但這沒有用。
對於失敗情況,只需檢查:
\s{2,}
即空白兩次或兩次以上。 如果匹配,則驗證失敗。
這應該檢查前后和兩個以上的空格
[^\s]([ ]{2,})[^\s]
閱讀此答案后https://stackoverflow.com/a/1240365/2136936
我想出了以下正則表達式,這正是我想要的:
^[\\S](?!.*\\s{2,}).*[\\S]$
我不明白的一件事是為什么它不能這樣工作: ^[\\\\S].*(?!\\\\s{2,}).*[\\\\S]$
您可以為其使用以下正則表達式(假設您不希望匹配空字符串):
"^\\S++(\\s\\S++)*+$"
首先是非零數量的非空白,然后是單個空白的多個(可能為零)重復,然后是多個(非零)非空白。
除了使用非回溯的++
和*+
運算符,您還可以使用普通的+
和*
運算符(具有相同的結果); 請注意,如果字符串很長(幾千字節),則非回溯運算符的性能會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.