正则expression式 – 连字符应该逃脱吗?

可能重复:
如何用正则expression式匹配连字符?

连字符是正则expression式中的一个特殊字符,例如,select一个范围,我可以这样做:

[0-9A-F] 

但是在方括号之外,它只是一个普通的字符吗? 我已经在一些在线正则expression式testing器上testing过了,连字符看起来像是方括号之外的常规字符(如果它不在两个字符之间,甚至在方括号内,例如[-g]似乎匹配 – 或者g)是否逃跑。 我找不到这个答案,但我想知道是否是传统的逃脱连字符。

谢谢!

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

在angular色等级中首先或最后find一个连字符是比较常见的,但绝对不会被愤怒的领带群体所欺骗,而是select逃离它。

(其实……我的经验是,大量的正则expression式被不完整的语法所利用,在这种情况下,你通常会看到所有的东西都被转义了(例如[az\%\$\#\@\!\-\_]只是因为工程师不知道什么是“特殊的”,什么不是……所以他们“玩得很安全”,用大量的反斜杠混淆表情,你会自己做,你的同时代人,你的后代是一个很大的忙,花时间才能真正理解正则expression式的语法使用之前)。

好问题!

在字符类之外,通常不会跳过连字符。 如果我在angular色课外看到了一个逃脱的连字符,那就暗示它是由一个不太喜欢正则expression式的人写的。

在angular色内部,我不认为一种方式是传统的, 根据我的经验, 通常似乎是把[-._:][-._:]第一个或最后一个放在[-._:][._:-] ,以避免反斜线; 但是我也经常看到它的转义,就像在[._\-:] ,我不会称之为非常规的。

通常情况下,您总会首先在[]匹配部分放置连字符。 EG,要匹配包括连字符的任何字母数字(长写),您可以使用[-a-zA-Z0-9]