3 回答
TA贡献1779条经验 获得超6个赞
只要使用\1
... \9
(或者$1
... $9
在一些正则表达式实现)就像你通常会。编号从左到右,基于开放括号的位置(因此,嵌套组的编号要大于嵌套在其中的组的编号)。
TA贡献1946条经验 获得超3个赞
请注意,这是对Zim博士的评论的答复:
“奇怪的是,两种方法似乎都可以正常工作。我选择了“ Regulator”,它至少说明了正则表达式是如何分解的。如果它具有设置实现的功能,那么我认为我有业务。”
但是我的回答对于评论框来说太长了。
不,您不需要转义加号(在这种情况下为连字符)。在字符类中,以下字符有特殊含义:],^和-。这三个字符是唯一可能需要转义的字符(请注意,[不需要转义!)。我说可能是因为它取决于这些元字符出现的位置。该^只具有特殊的含义(作为否定指标)时,放置在一个字符类的开始,在其他地方,它不需要逃逸,将只匹配文字^。一些例子说明:
[^a] // special meaning: matches any character except 'a'
[a^] // matches 'a' or '^'
[\^a] // matches '^' or 'a'
当连字符不在字符类的开头或结尾时,连字符仅具有特殊含义(作为范围指示符)。例子:
[a-c] // special meaning: matches 'a', 'b' or 'c'
[ac-] // matches 'a', 'c' or '-'
[-ac] // matches '-', 'a' or 'c'
[a\-c] // matches 'a', '-' or 'c'
毫无疑问,某些正则表达式实现可能与我刚刚发布的有所不同,但是大多数语言都将遵守这些规则(至少我使用过的所有语言!)。正如您所注意到的,在字符类中过度转义字符是安全的:这不会造成任何危害。两个类[+]和[\+]将匹配文字+。恕我直言,第一个是首选,因为我发现一个正则表达式有太多的转义字符难以阅读。但是有些人会不同意我的看法,并发现通过使用转义符(虽然不是必需的)可以更清楚地知道字面值+是匹配的,而不是贪婪的量词。
希望这能说明问题。
- 3 回答
- 0 关注
- 1070 浏览
添加回答
举报