连字符应该逃脱吗?
可能重复:
如何使用正则表达式匹配连字符?
例如,连字符在正则表达式中是一个特殊字符,可以选择一个范围,我可以这样做:
[0-9A-F]
但是在方括号之外,它只是一个普通的字符吗? 我已经在几个在线正则表达式测试人员上测试了这一点,并且连字符似乎用作方括号外的常规字符(如果它不在两个字符之间 - 例如[-g]似乎匹配,则甚至在方括号内) - 或者g)是否逃跑。 我找不到这个答案,但我想知道是否是传统的逃脱连字符。
谢谢!
正确的在所有方面。 在字符类之外(这就是所谓的“方括号”)连字符没有特殊含义,在字符类中,可以将连字符作为范围中的第一个或最后一个字符(例如[-az]
或[0-9-]
), 或者转义它(例如[az-0-9]
),以便将“连字符”添加到您的课程中。
在角色等级中首次或最后找到一个连字符是比较常见的,但绝对不会被成群的愤怒领袖认定为选择逃离它。
(其实......我的经验是,许多正则表达式被没有完全熟悉语法的人所使用,在这些情况下,你通常会看到所有的东西都被转义了(例如[az%$#@!-_]
仅仅是因为工程师不知道什么是“特殊”的,什么不是...所以他们“明哲保身”的混淆与过度反斜杠负荷表达你会做你自己,你的同时代人,以及你的后代是一个巨大的忙,在使用它之前花时间真正理解正则表达式的语法。)
伟大的问题!
在字符类之外,通常不会跳过连字符。 如果我在角色课外看到了一个逃脱的连字符,那就表明它是由一个不太喜欢正则表达式的人写的。
在角色课堂内部,我认为一种方法在另一种方式上是常规的; 根据我的经验,通常似乎是放置第一个或最后一个,如[-._:]
或[._:-]
,以避免反斜线; 但我也经常看到它的转义,就像在[._-:]
,我不会称之为非常规。
通常情况下,您总是会将连字符放在[]
匹配部分中。 EG,以匹配包括连字符的任何字母数字(长写),您可以使用[-a-zA-Z0-9]
上一篇: Should hyphens be escaped?
下一篇: Unusual segfault when using C++ Std Lib on embedded Linux