2014-10-18 84 views
1

我試圖創建一個正則表達式匹配的字母數字字符和下劃線_。這是我的正則表達式:"\w_*[^-$\s\]",我的感覺是,這個正則表達式是指任何字母數字字符\w,下劃線_,並沒有-$,或空白。它是否正確?正則表達式包含字母,數字和_

+1

'\ w'還涵蓋了'_'符號。 – 2014-10-18 17:24:27

+0

是的,你不應該逃避']' – thefourtheye 2014-10-18 17:24:54

回答

4

正則表達式理解爲這實際上在字符串中的字符匹配的模式,從左到右,所以你的模式實際上是相匹配的字母,那麼下劃線(0或以上) ,那麼至少有一個字符不是連字符,美元或空格。

既然你想上的字符類型交替,只使用一個字符類,以顯示你允許哪些字符:

[\w_] 

這就驗證字符串的任何部分匹配它,讓我們錨它開始和到字符串:

^[\w_]$ 

現在我們看到這個字符類缺少一個量詞,所以我們完全匹配上一個字符。我們可以修復使用+(如果你想要一個或多個字符,沒有空字符串)或*(如果你想允許空字符串)。我會在這裏使用+

^[\w_]+$ 

事實證明,在\w字符類已經包含了下劃線,所以我們可以從模式中刪除多餘的下劃線:

^[\w]+$ 

現在我們必須在字符類只有一個字符,所以我們不再需要的字符類括號都:

^\w+$ 

這就是你所需要的,除非我失去了一些關於你的要求。

+0

這個回答假設我們要驗證*整個字符串*正則表達式。如果要檢查字符串中是否存在至少一個字母數字/下劃線,請使用@ hwnd的答案(http://stackoverflow.com/a/26442555/129655)。 – 2014-10-18 17:30:13

2

,如果右括號沒有轉義並且您編輯了正則表達式,則您是半正確的。此外,令牌\w匹配下劃線,因此您不需要重複此字符。正則表達式說:

\w   # word characters (a-z, A-Z, 0-9, _) 
_*   # '_' (0 or more times) 
[^-$\s] # any character except: '-', '$', whitespace (\n, \r, \t, \f, and " ") 

你可以簡單地寫你的整個正則表達式如下匹配單詞字符:

\w+  # word characters (a-z, A-Z, 0-9, _) (1 or more times) 

如果你想匹配整個字符串,一定要錨你的表達。

^\w+$ 

說明:

^   # the beginning of the string 
\w+  # word characters (a-z, A-Z, 0-9, _) (1 or more times) 
$   # before an optional \n, and the end of the string 
相關問題