我尝试创建正则表达式以匹配字母数字字符和下划线_
。这是我的正则表达式:"\w_*[^-$\s\]"
我的印象是这个正则表达式表示任何字母数字字符\w
,下划线_
,没有-
,$
,或者空白。这是对的吗?
答案 0 :(得分:4)
正则表达式被读作实际匹配字符串中字符的模式,从左到右,因此您的模式实际上匹配字母数字,然后是下划线(0或更多),那么至少一个字符不是连字符,美元或者是空白。
由于您正在尝试替换字符类型,只需使用字符类来显示您允许的字符:
[\w_]
这会检查字符串的任何部分是否匹配,所以让我们将它锚定到字符串的开头和字符串:
^[\w_]$
现在我们看到字符类缺少量词,所以我们只匹配一个字符。我们可以使用+
(如果你想要一个或多个字符,没有空字符串)或*
(如果你想允许空字符串)来修复它。我在这里使用+
。
^[\w_]+$
事实证明,\w
字符类已包含下划线,因此我们可以从模式中删除多余的下划线:
^[\w]+$
现在我们在字符类中只有一个字符,所以我们不再需要字符类括号:
^\w+$
这就是你所需要的,除非我遗漏了你的要求。
答案 1 :(得分: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