Regex 字母,数字,破折号和下划线

76

我不确定如何实现这个匹配表达式。目前我正在使用:

([A-Za-z0-9-]+)

我想匹配字母和数字,还希望在同一个表达式中匹配破折号和下划线。 有人知道怎么做吗?

我想能够匹配product_nameproduct-name

4个回答

134

只需转义破折号以防止它们被解释(我认为下划线不需要转义,但这样做无妨)。您没有说使用哪个正则表达式。

([A-Za-z0-9\-\_]+)

作为后续,我如何应用上述规则,同时排除句号?例如,我想忽略image.png。 - George Johnston
1
@George 请不要在任何地方询问跟进问题,除了新问题之外。评论不是用来处理这个的;回答也不是用来处理这个的;如果你有一个新问题,请提出一个新问题。 - anon
4
“但它不会有任何坏处” --- 如果你在HTML5中使用它,是会有问题的,因为会抛出一个“Invalid regular expression: /([A-Za-z0-9-_]+)/: Invalid escape”的错误!请使用([A-Za-z0-9\-_]+)代替! :) - Gifford N.
@John 这将允许字符串以破折号或下划线开头。有没有办法禁止它们在开头和结尾? - Rayhan Muktader

22

你的表达式应该已经匹配了破折号,因为最后的 - 不会被解释为一个范围操作符(因为这个范围没有结束)。如果要添加下划线作为匹配对象,尝试以下方法:

([A-Za-z0-9_-]+)

20

根据你所使用的正则表达式变体,你可能只需做如下操作:

([\w-]+)

另外,除非这是一个较大表达式的一部分,否则您可能不需要使用括号。


这是针对一个 .htaccess 文件的,所以我需要括号,因为正如你所说,它是一个较大表达式的一部分 :) - George Johnston
这对我很有用,我认为使用“word”快捷方式更加简洁。实际上,我使用了[\w-]*。 - Tony Brasunas

2
您可以匹配所有这些字符,但更安全的做法是转义“-”,以明确它的字面含义。如果您使用的是 POSIX 变体, 您可以选择使用:([[:alnum:]\-_]+),但由于您包括了下划线,所以我建议您直接使用:([\w\-]+) (适用于所有变体)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接