括号表达式“[...]”中应转义哪些字符?

括号表达式“[...]”中应转义哪些字符?

使用以下正则表达式[{-]似乎不需要{转义。它是否正确?还有哪些其他字符不需要/不需要在括号表达式中转义?

答案1

请注意,有数十种不同的正则表达式风格。 POSIX 标准至少指定了 4 个(BRE、ERE、awk EREs、ex/ viBRE),还有更多类似perl、PCRE等vimksh93

POSIX BRE(由grep/使用sed)和埃雷(由grep -E/sed -Ebash[[ =~ ]]1 使用),内部括号表达式( [...]),唯一特殊的字符是^(当第一个字符时)、 ](当不是第一个或后面的字符时])、-(当不是第一个、最后一个或后面的字符时^)以及当某些, , ...[的一部分时换行符,即使本身不特殊正则表达式语法中的 正则表达式在使用正则表达式的实用程序中通常很特殊,例如分隔正则表达式的地方。[.x.][:class:][=e=]grep

\in those 并不特殊,理论上不能用于转义字符或用于\t指定 TAB 之类的事情。

[\-~]\旨在匹配从到 的一系列字符~。要匹配-or ~,则为[~-]or [-~]。请记住,-需要位于第一个或最后一个,]需要位于第一个,并且[后面不应跟有.,=:

{无论如何,-这并不特别,但不是像你那样处于最后位置时。

请注意,虽然BRE 和 ERE 中要求[\t]和与or[t\]匹配,但我不会依赖它,因为有几个实用程序忽略了该要求。使用or来匹配or 。\t[\\t][\\t]\t

例如,在 GNU 中sedsed 's/[\t]//'删除 TAB 而不是\texcept$POSIXLY_CORRECT位于其环境中。


¹ 有趣的是,用来bash返回[[ '\' =~ ['.'] ]]true ,正如所引用的.,它会调用正则表达式引擎[\.]作为正则表达式,试图转义此处不需要转义的点,并且 4.4 仍然无法返回 true[[ '\' =~ [^]'.'] ]]同样的原因。

相关内容