可能重复:如何将连字符与正则表达式匹配?
连字符是正则表达式中的一个特殊字符,例如,要选择范围,我可以执行以下操作:
[0-9A-F]
但是在方括号之外它只是一个普通的角色吗?我已经在几个在线正则表达式测试器上测试了这个,并且连字符似乎在方括号之外用作普通字符(如果它不在两个字符之间,甚至在方括号内部 - 例如[-g]似乎匹配 - 或g)是否逃脱 . 我找不到答案,但我想知道逃避连字符是否是传统的 .
谢谢!
通常,您始终将连字符放在 [] 匹配部分中 . EG,要匹配任何包含连字符的字母数字(写得很长),你会使用 [-a-zA-Z0-9]
[]
[-a-zA-Z0-9]
各方面都要正确 . 在字符类之外(这就是"square brackets"被称为),连字符没有特殊含义,并且在字符类中,您可以将连字符作为范围中的第一个或最后一个字符(例如 [-a-z] 或 [0-9-] ), OR 逃避它(例如 [a-z\-0-9] )以便将"hyphen"添加到您的 class .
[-a-z]
[0-9-]
[a-z\-0-9]
在角色类中首先或最后发现一个连字符更为常见,但绝不会被大量愤怒的颈带私刑用来选择逃避它 .
(实际上......我的经验是,很多正则表达式都被人们所采用,因为工程师并没有真正看到所有事情(例如 [a-z\%\$\#\@\!\-\_] ),而是因为工程师并没有自己做什么,你的同时代人,以及通过在使用之前花时间真正理解正则表达式语法,你的后代是一个巨大的好处 . )
[a-z\%\$\#\@\!\-\_]
好问题!
在字符类之外,通常不要逃避连字符 . 如果我在角色类之外看到一个逃脱的连字符,那就告诉我它是由一个对正则表达式不太熟悉的人写的 .
在内部角色类中,我认为一种方式不是传统方式而是另一种方式;根据我的经验,通常似乎是放在第一个或最后一个,如 [-._:] 或 [._:-] ,以避免反斜杠;但我也常常看到它逃脱了,就像 [._\-:] 一样,我不会称之为非常规 .
[-._:]
[._:-]
[._\-:]
3 回答
通常,您始终将连字符放在
[]
匹配部分中 . EG,要匹配任何包含连字符的字母数字(写得很长),你会使用[-a-zA-Z0-9]
各方面都要正确 . 在字符类之外(这就是"square brackets"被称为),连字符没有特殊含义,并且在字符类中,您可以将连字符作为范围中的第一个或最后一个字符(例如
[-a-z]
或[0-9-]
), OR 逃避它(例如[a-z\-0-9]
)以便将"hyphen"添加到您的 class .在角色类中首先或最后发现一个连字符更为常见,但绝不会被大量愤怒的颈带私刑用来选择逃避它 .
(实际上......我的经验是,很多正则表达式都被人们所采用,因为工程师并没有真正看到所有事情(例如
[a-z\%\$\#\@\!\-\_]
),而是因为工程师并没有自己做什么,你的同时代人,以及通过在使用之前花时间真正理解正则表达式语法,你的后代是一个巨大的好处 . )好问题!
在字符类之外,通常不要逃避连字符 . 如果我在角色类之外看到一个逃脱的连字符,那就告诉我它是由一个对正则表达式不太熟悉的人写的 .
在内部角色类中,我认为一种方式不是传统方式而是另一种方式;根据我的经验,通常似乎是放在第一个或最后一个,如
[-._:]
或[._:-]
,以避免反斜杠;但我也常常看到它逃脱了,就像[._\-:]
一样,我不会称之为非常规 .