我試圖創建一個正則表達式匹配的字母數字字符和下劃線_
。這是我的正則表達式:"\w_*[^-$\s\]"
,我的感覺是,這個正則表達式是指任何字母數字字符\w
,下劃線_
,並沒有-
,$
,或空白。它是否正確?正則表達式包含字母,數字和_
1
A
回答
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
'\ w'還涵蓋了'_'符號。 – 2014-10-18 17:24:27
是的,你不應該逃避']' – thefourtheye 2014-10-18 17:24:54