【发布时间】:2010-02-25 22:09:04
【问题描述】:
我不确定如何实现这个匹配表达式。目前我正在使用,
([A-Za-z0-9-]+)
...匹配字母和数字。我还想在同一表达式中匹配破折号和下划线。有人知道怎么做吗?
我希望能够匹配 product_name 和 product-name
【问题讨论】:
标签: regex
我不确定如何实现这个匹配表达式。目前我正在使用,
([A-Za-z0-9-]+)
...匹配字母和数字。我还想在同一表达式中匹配破折号和下划线。有人知道怎么做吗?
我希望能够匹配 product_name 和 product-name
【问题讨论】:
标签: regex
只需转义破折号以防止它们被解释(我认为下划线不需要转义,但它不会造成伤害)。你没有说你使用的是哪个正则表达式。
([A-Za-z0-9\-\_]+)
【讨论】:
Invalid regular expression: /([A-Za-z0-9\-\_]+)/: Invalid escape”错误!。请改用([A-Za-z0-9\-_]+)! :)
您的表达式应该已经匹配破折号,因为最后的 - 不会被解释为范围运算符(因为范围没有结束)。要添加下划线,请尝试:
([A-Za-z0-9_-]+)
【讨论】:
根据您的正则表达式变体,您可以简单地执行以下操作:
([\w-]+)
另外,您可能不需要括号,除非这是更大表达式的一部分。
【讨论】:
您确实可以匹配所有这些字符,但转义 - 更安全,这样就可以清楚地理解它的字面意思。
如果您使用的是POSIX variant,您可以选择使用:
([[:alnum:]\-_]+)
但是因为你包含了下划线,所以我会简单地使用:
([\w\-]+)
(适用于所有变体)
【讨论】: