正则表达式 - 连字符应该被转义吗?

时间:2012-03-06 17:46:26

标签: regex

  

可能重复:
  How to match hyphens with Regular Expression?

连字符是正则表达式中的一个特殊字符,例如,要选择一个范围,我可以这样做:

[0-9A-F]

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

谢谢!

3 个答案:

答案 0 :(得分:241)

在所有战线上纠正。在字符类之外(这就是所谓的“方括号”),连字符没有特殊含义,在字符类中,您可以将连字符作为范围中的第一个或最后一个字符(例如[-a-z][0-9-]),转义它(例如[a-z\-0-9]),以便为您的班级添加“连字符”。

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

(实际上......我的经验是,那些没有完全理解语法的人会使用很多正则表达式。在这些情况下,你通常会看到一切都被转义(例如[a-z\%\$\#\@\!\-\_])因为工程师不知道什么是“特殊的”,什么不是......所以他们“安全地玩”并用过多的反斜杠模糊表达。你会做自己,你的同时代,你的后代是一个巨大的利益在使用之前花些时间真正理解正则表达式语法。)

很棒的问题!

答案 1 :(得分:13)

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

在角色类中,我认为一种方式不是传统方式;根据我的经验,通常似乎是放在第一个或最后一个,如[-._:][._:-],以避免反斜杠;但我也经常看到它被转义,如[._\-:],我不会称之为 un 传统。

答案 2 :(得分:7)

通常,您始终将连字符放在[]匹配部分中。 EG,为了匹配包括连字符在内的任何字母数字(长篇大论),你可以使用[-a-zA-Z0-9]