包括字母数字和下划线的正则表达式
我正在尝试创建一个正则表达式,用来匹配字母、数字和下划线 _
。这是我的正则表达式:"\w_*[^-$\s\]"
。我觉得这个正则表达式的意思是可以匹配任何字母数字字符 \w
、一个下划线 _
,并且不包括 -
、$
或空格。这样理解对吗?
2 个回答
3
是的,如果你的闭合括号没有被转义,并且你稍微修改了一下你的正则表达式,那你说得差不多对。还有,\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
5
正则表达式可以看作是用来匹配字符串中字符的模式,它是从左到右进行匹配的。所以你的模式实际上是先匹配一个字母或数字,然后是零个或多个下划线,最后至少要有一个不是连字符、美元符号或空格的字符。
因为你想要交替使用不同类型的字符,所以可以用字符类来表示你允许哪些字符:
[\w_]
这样会检查字符串的任何部分是否符合这个模式,所以我们需要把它固定在字符串的开头和结尾:
^[\w_]$
现在我们看到字符类没有量词,这意味着我们只匹配一个字符。我们可以用 +
来修复这个问题(如果你想要一个或多个字符,不允许空字符串)或者用 *
(如果你想允许空字符串)。我这里会用 +
。
^[\w_]+$
实际上,\w
字符类已经包含了下划线,所以我们可以把模式中的多余下划线去掉:
^[\w]+$
现在字符类中只有一个字符,所以我们完全不需要字符类的括号了:
^\w+$
这就是你需要的全部,除非我对你的要求有什么遗漏。