【发布时间】:2012-12-02 12:32:57
【问题描述】:
在正则表达式中,某些字符只有在适当放置时才能获得元字符的特殊含义,否则保持其字面含义。例如,- 字符仅在放置在方括号表达式 [] 中并且在外部是文字短划线时才被视为元字符。
但就个人而言,我喜欢将元字符视为保留字符,并采用严格的规则来转义每个需要字面量的元字符。这节省了我一点时间,否则我会花在考虑元字符在正则表达式中的位置上。
但是,据我所知,转义这样的字符通常是 GNU BRE 的错误。而这个正则表达式
foo\-[0-9]+
在其\- 部分被 RegexBuddy 视为无效。此外,RegexBuddy 指示 GNU ERE(但不是 PCRE)的相同错误。另一方面,Ubuntu 上的 grep 不会将此正则表达式视为错误,并且从我的测试中它运行良好,即使 grep 应该默认使用 ERE。
因此,将 BRE 和 RegexBuddy 放在一边,仅考虑在当今许多系统和编程语言中使用的 PCRE 和 ERE,问题是习惯于转义每个可能的元字符以获取其字面意义可能是多么错误?
【问题讨论】: