2014-10-18 170 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