可能的重复: 如何匹配连字符与正则表达式?
连字符是正则表达式中的一个特殊字符,例如,为了选择一个范围,我可以这样做:
[0-9A-F]
但在方括号之外,它只是一个普通字符,对吧?我在几个在线regex测试器上测试了这个,连字符似乎是方括号外的正常字符(甚至是方括号内,如果它不在两个字符之间-例如[-g]似乎匹配-或g),无论它是否转义。我找不到这个问题的答案,但我想知道是否转义连字符是传统的。
谢谢!
可能的重复: 如何匹配连字符与正则表达式?
连字符是正则表达式中的一个特殊字符,例如,为了选择一个范围,我可以这样做:
[0-9A-F]
但在方括号之外,它只是一个普通字符,对吧?我在几个在线regex测试器上测试了这个,连字符似乎是方括号外的正常字符(甚至是方括号内,如果它不在两个字符之间-例如[-g]似乎匹配-或g),无论它是否转义。我找不到这个问题的答案,但我想知道是否转义连字符是传统的。
谢谢!
当前回答
通常,在[]匹配部分中总是将连字符放在前面。例如,要匹配任何字母数字字符,包括连字符(长连字符),您可以使用[a -a-zA-Z0-9]
其他回答
通常,在[]匹配部分中总是将连字符放在前面。例如,要匹配任何字母数字字符,包括连字符(长连字符),您可以使用[a -a-zA-Z0-9]
在字符类之外,通常不转义连字符。如果我在字符类之外看到一个转义的连字符,那就表明它是由不太熟悉正则表达式的人编写的。
在角色职业中,我不认为一种方法比另一种方法更传统;根据我的经验,通常似乎不是放在前面就是放在最后,如[-]。_:]或[。_:-],避免使用反斜杠;但我也经常看到它逃跑了,比如[。_\-:],我不认为这不合常规。
各方面都正确。在字符类之外(即所谓的“方括号”),连字符没有特殊含义,并且在字符类内,您可以将连字符作为范围内的第一个或最后一个字符(例如[a-z]或[0-9-]),或者转义它(例如[a-z\-0-9]),以便将“连字符”添加到您的类中。
在一个字符类别中,连字符放在第一个或最后一个更常见,但你绝不会因为选择逃避它而被一群愤怒的大胡子私刑。
(Actually... my experience has been that a lot of regex is employed by folks who don't fully grok the syntax. In these cases, you'll typically see everything escaped (e.g. [a-z\%\$\#\@\!\-\_]) simply because the engineer doesn't know what's "special" and what's not... so they "play it safe" and obfuscate the expression with loads of excessive backslashes. You'll be doing yourself, your contemporaries, and your posterity a huge favor by taking the time to really understand regex syntax before using it.)
好问题!