包括字母数字和下划线的正则表达式

2 投票
2 回答
2182 浏览
提问于 2025-04-28 07:15

我正在尝试创建一个正则表达式,用来匹配字母、数字和下划线 _。这是我的正则表达式:"\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+$

这就是你需要的全部,除非我对你的要求有什么遗漏。

撰写回答