在正则表达式中,使用特殊字符(\^$.|?*+()[]{}
)作为文字的通常方法当然是用反斜杠对其进行转义:
\+\.
但是我偶尔看到使用字符类实现相同功能的代码:
[+][.]
现在,这显然不是字符类的主要目的,字符类通常用于匹配多个字符之一。尽管第二个示例使用了更多的击键,但您可能会认为它也更具可读性。
那么有没有充分的理由不这样做(性能还是其他)?还是只是归结为个人风格偏好?
我知道这不是一个令人震惊的问题,这只是一个小问题,它已经困扰了我一段时间,而我在其他地方找不到任何具体提及
答案 0 :(得分:1)
我倾向于认为使用字符类作为逃避单个字符的一种方法,这是字符类的副作用,这不是其主要目的。字符类的主要原因是要表示字符的范围,而不仅仅是单个字符。
因此,关于模式[+][.]
的一件事可能是负面的,那就是它可能会让正则表达式的未来读者怀疑您是否不打算在字符类中包含多个字符。也许,在特定条件下,该读者甚至可以通过向他认为被错误地省略的类添加字符来更改模式以“修复”它。
与\+
相比,使用[+]
可能会有一点性能优势,因为后者可能需要正则表达式引擎来编译一个正式列表(其中只包含一个字符)。但是,我希望性能差异会很小。