簡體   English   中英

當單詞之間有過多空格時,正則表達式將失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM