2013-04-23 17 views
0

我有以下的正則表達式:正則表達式 - 如何讓空白僅如果有其它字符

(\\+)([\\w\\d]+)(=)(.+)

這應該允許:

+ [CharWords] [位數] = [一切]

第二部分('='之後)不應該允許空格字符出現,除非有數字或字符字符。

我似乎無法做到這一點。如何建立這樣一個RegEx。

編輯:

下面是有效的例子:

+Valid123=Valid123 
+123Valid=Valid 123 
+Valid=This is Valid 14 
+Valid=(This is Valid) 

我的問題是如何避免這個問題:

無效=空白

+1

你應該給那些積極的比賽和消極比賽,以幫助用戶測試,看看他們是否正確地匹配你的問題串的例子。 – Walls 2013-04-23 20:39:49

+2

請澄清一下這句話:'不應該讓空格字符在那裏,除非有一個數字或字符字符。 – anubhava 2013-04-23 20:43:19

+0

你的意思是:'String str =「abcde =」'應該轉到'String str =「abcde =」'或者轉到'「abcde =」'?對於第二個,使用'str = str.trim();'['String.trim()'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html #trim%28%29) – Justin 2013-04-23 20:45:19

回答

2
  1. \w代表「單詞字符」,通常[A-Za-z0-9_]所以你不需要添加\d類裏面。
  2. ...不允許空格字符在那裏,除非有一個數字 或word char。

    嘗試,也許這種方式... = (\\s*\\w+)+, - >\\s*\\w+只接受有zero or more whitespaces at start1 or more characters at end"a"" ab"" c"字符串。 (\\s*\\w+)+將使正則表達式接受一個或多個這樣的標記。

+0

這工作,我不知道這意味着什麼。 這是否意味着如果空白單獨爲'\\ s *',但是如果它在一個組中(\\ s * \\ w +)+'應將其考慮在內,則將限制設置爲0? – 2013-04-23 21:08:33

+0

根據輸入的性質,值得注意的是該組不包含非空格(0xA0)。如果您希望在輸入中遇到非中斷空格,您可能需要添加它。 – Aurand 2013-04-23 21:16:58

+2

請注意,不會允許:'+ abd12 = 1.5'不知道這是否需要。 – anubhava 2013-04-23 21:19:56

1

試試這個:^\+[\w\d]+=(\S+.*)$

這匹配你的第一塊,但關鍵是在=之後的部分。它至少需要一個非空格,後面跟任何東西(在非空格的初始匹配後允許空格),所以+word123= testing將失敗,其中+word123=testing 123會通過。如果第一個字符。 =是空格後,不允許。如果第一個字符。只是一個空間,它應該允許事實之後的空間和其他任何東西。

如果需要改變什麼可以來初始字/數字/等的=後後,只需在地方.(\S+.*)插入一個更復雜的規則在()

測試可以看到here。您可能需要稍微調整一下(轉義Java斜槓等)。

2

以下的正則表達式應該爲你工作:

^(\\+)(\\w+)(=)(\\s*\\S+\\s*)+$ 
相關問題