2014-07-17 56 views
1

我有這樣的正則表達式(這是感謝你們的一大途徑)字符的最小量不知道如何去做。我必須在@之後至少有3個字符,但我還需要允許至少3個字符,在空格之前至少有兩個字符,然後一個空格是可選的。所以,我需要匹配這些模式:不包括空格

@tst 
@tst test 
@ts t 

我如何可以實施最少三個字符如果沒有空間,或者至少有兩個字符,一個空格,然後在至少一個或多個字符?我可以把它做成兩個單獨的表達式,但我希望可以用一個來完成它。

任何人都可以指向正確的方向我

謝謝。

編輯: 好吧,我想我已經種實現什麼,我想:

(?<=(|\\s|\\A|^))@{1}(([\\w]{3,}+ ?[\\w]*)|([\\w]{2,} {1}[\\w]{1,})) 

有沒有更有效的方式還是這應該怎麼做?

+0

刪除commentt – crazyfool

+0

雅..這將幾乎做到這一點.. – TheLostMind

+1

注意,空間是在第一部分多餘的,因爲你也有'\\ s'。 – Keppil

回答

1

我認爲你可以簡化你的表情有點:

String regex = "(?<=(\\s|\\A|^))@(\\w{2,} ?\\w+)"; 

我做了什麼:

  • 移除了第一部分的冗餘空間。
  • 簡化了最後一個表達式。根據您的描述,它現在接受至少2個字符,然後接受一個可選空白,然後至少再添加一個字符。

我不確定(!)部件是什麼,所以它在該版本中被刪除以符合您的測試用例。

+0

該解決方案的問題(我認爲)是它允許字符串之間的任何空格字符,當我只想要允許1個空格時。而且它會匹配@ab,我不想允許,它需要是「@abc」或「@ab c」 – crazyfool

+1

這不會匹配'@ ab'。它接受3個或更多字母,第二個字符後面有一個可選的空白。我已經切換到空白而不是'\\ s'。 – Keppil

+1

我的不好,只是試了一遍,看起來像它正是我想要的。我會測試一下,然後接受,謝謝哥們:) – crazyfool

1

下一個應該滿足您的需求:

(?<=(?<!\w)@)\w{2,} ?\w+ 

Regular expression visualization

Debuggex Demo

不要忘了逃跑Java中的反斜槓,因爲在一個字符串:

(?<=(?<!\\w)@)\\w{2,} ?\\w+ 
+0

說得太快..有一個模式,這錯過了「@ abc d」 – crazyfool

+0

@crazyfool那麼,這個輸入字符串並不尊重你給出的規則:*「如果沒有空格或最少兩個字符,一個空格,然後至少一個char,我怎麼能強制執行至少三個字符?」*。該輸入有3個字符,然後是空格,然後是字符... – sp00m

+0

@ sp00m:您在空格前缺少_minimum_部分。再次閱讀你的報價,3個字母(或更多)也完全沒問題。 – Keppil

0

我能想到的最簡單的正則表達式是:

(?<=\s|^)@(\s*\w){3,}