【问题标题】:Regex Letters, Numbers, Dashes, and Underscores正则表达式字母、数字、破折号和下划线
【发布时间】:2010-02-25 22:09:04
【问题描述】:

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

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

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

我希望能够匹配 product_nameproduct-name

【问题讨论】:

    标签: regex


    【解决方案1】:

    只需转义破折号以防止它们被解释(我认为下划线不需要转义,但它不会造成伤害)。你没有说你使用的是哪个正则表达式。

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

    【讨论】:

    • 作为后续,如何在排除句点的同时应用上述规则?例如,我想忽略 image.png
    • @George 除了新问题外,请不要在任何地方提出后续问题。评论不是为了那个;答案不是为了那个;如果您有新问题,请提出新问题。
    • "but it can't hurt" --- 是的,如果您在 HTML5 中使用它可以,这将引发“Invalid regular expression: /([A-Za-z0-9\-\_]+)/: Invalid escape”错误!。请改用([A-Za-z0-9\-_]+)! :)
    【解决方案2】:

    您的表达式应该已经匹配破折号,因为最后的 - 不会被解释为范围运算符(因为范围没有结束)。要添加下划线,请尝试:

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

    【讨论】:

      【解决方案3】:

      根据您的正则表达式变体,您可以简单地执行以下操作:

      ([\w-]+)
      

      另外,您可能不需要括号,除非这是更大表达式的一部分。

      【讨论】:

      • 这是一个 .htaccess 文件,所以我需要括号,因为正如你所说,它是一个更大的表达式:)
      • 这对我有用,而且我认为使用“word”快捷方式会更简洁一些。其实我用 [\w-]*
      【解决方案4】:

      您确实可以匹配所有这些字符,但转义 - 更安全,这样就可以清楚地理解它的字面意思。

      如果您使用的是POSIX variant,您可以选择使用:

      ([[:alnum:]\-_]+)

      但是因为你包含了下划线,所以我会简单地使用:

      ([\w\-]+)

      (适用于所有变体)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-03
        • 2010-09-25
        • 1970-01-01
        • 2015-04-28
        • 2017-04-30
        相关资源
        最近更新 更多