2011-04-04 58 views
1

的要求是,在它的輸入的字符串的前兩個字符,不能包含「*」,「%」或「_」 m和最小長度是3。我寫的是這樣的:如何編寫匹配特定前兩個字符和其他N個字符的正則表達式?

^[^\\*\\%\\_]{1}[^\\*\\%\\_]{1} 

現在我需要結束「放置任何角色,至少一次」。

+3

{1}是多餘的。 – Ingo 2011-04-04 13:55:56

+1

所有這些雙反斜槓都是某些語言字符串轉義機制的人工產物。請刪除它們或使您正在編寫的編程語言顯式化。 – 2011-04-04 14:00:48

+0

爲了澄清,語言是Java,我沒有把它寫成單個表達式,因爲第一個禁止的字符還包含一個空格(在測試/複製粘貼過程中以某種方式轉義)。 – Andrija 2011-04-05 09:26:56

回答

5

下面應該工作:

^[^*%_]{2}.+ 
+1

+1轉義字符類中的特殊字符是多餘的。該表達式也被正確錨定。 :) – 2011-04-04 14:03:45

2

答案是如此短暫,我要成爲一個有點冗長,但它是

.+ 

連同你已經擁有:

[^\*\%\_]{2}.+ 

請注意,你不能寫backslashs兩次。

+0

試過[。] +並沒有工作,沒想到試過這個,謝謝。 – Andrija 2011-04-04 13:59:43

+0

+1由於特殊字符位於字符類('[]')內,所以根本不需要任何反斜槓。 – 2011-04-04 14:00:52

+0

另外,您可能希望正確定位表達式,以便始終匹配* first *兩個字符:'^ [^ *%_] {2}。+ $'。 – 2011-04-04 14:02:18

0

只需添加.+。所以你的正則表達式將是

^[^\\*\\%\\_]{1}[^\\*\\%\\_]{1}.+ 

這將匹配任何數字的任何字符後,你已經匹配的兩個。

0

可以簡化你這樣的正則表達式:

^[^\\*\\%\\_]{2}.+ 
相關問題