首页 文章

正则表达式 - 连字符是否应该被转义? [重复]

提问于
浏览
150

可能重复:如何将连字符与正则表达式匹配?

连字符是正则表达式中的一个特殊字符,例如,要选择范围,我可以执行以下操作:

[0-9A-F]

但是在方括号之外它只是一个普通的角色吗?我已经在几个在线正则表达式测试器上测试了这个,并且连字符似乎在方括号之外用作普通字符(如果它不在两个字符之间,甚至在方括号内部 - 例如[-g]似乎匹配 - 或g)是否逃脱 . 我找不到答案,但我想知道逃避连字符是否是传统的 .

谢谢!

3 回答

  • 226

    通常,您始终将连字符放在 [] 匹配部分中 . EG,要匹配任何包含连字符的字母数字(写得很长),你会使用 [-a-zA-Z0-9]

  • 6

    各方面都要正确 . 在字符类之外(这就是"square brackets"被称为),连字符没有特殊含义,并且在字符类中,您可以将连字符作为范围中的第一个或最后一个字符(例如 [-a-z][0-9-] ), OR 逃避它(例如 [a-z\-0-9] )以便将"hyphen"添加到您的 class .

    在角色类中首先或最后发现一个连字符更为常见,但绝不会被大量愤怒的颈带私刑用来选择逃避它 .

    (实际上......我的经验是,很多正则表达式都被人们所采用,因为工程师并没有真正看到所有事情(例如 [a-z\%\$\#\@\!\-\_] ),而是因为工程师并没有自己做什么,你的同时代人,以及通过在使用之前花时间真正理解正则表达式语法,你的后代是一个巨大的好处 . )

    好问题!

  • 13

    在字符类之外,通常不要逃避连字符 . 如果我在角色类之外看到一个逃脱的连字符,那就告诉我它是由一个对正则表达式不太熟悉的人写的 .

    在内部角色类中,我认为一种方式不是传统方式而是另一种方式;根据我的经验,通常似乎是放在第一个或最后一个,如 [-._:][._:-] ,以避免反斜杠;但我也常常看到它逃脱了,就像 [._\-:] 一样,我不会称之为非常规 .

相关问题