正则表达式上下文中的“等价类”是什么意思?

问题描述

在某些形式的正则表达式中,在方括号表达式中,= 符号是一个特殊字符,用作分隔等价类中的任何元素的分隔符。 The documentation 表示如下:

等价类表达式应表示属于等价类的一组整理元素,如整理顺序中所述。仅应识别主要等价类。该类应通过将等价类中的任何一个整理元素括在括号等(“[=”和“=]”)分隔符中来表示。例如,如果'a'、'à'和'â'属于同一个等价类,则“[[=a=]b]”、“[[=à=]b]”和“[[ =â=]b]" 都等价于 "[aàâb]"。如果整理元素不属于等价类,则等价类表达式应视为整理符号。

我不太清楚这意味着什么。如果aàâ属于同一个等价类,是否意味着我们希望指定正则表达式"[ab]""[àb]"和{{ 1}} 是等价的吗?那么使用"[âb]" [= 分隔符的目的是什么,既然我们不妨写成=]

我理解“等价类”在其一般定义中的含义,但我无法理解其在此上下文中的含义。

解决方法

本质上,例如,[=a=] 的意思是“属于 a 所属等价类的所有字符。如果 aà 形成一个等价类,其中只包含这两个,那么 [=a=][=à=] 都与 相同(显然写在 […] 中)。但是如果等价类还包含 {{1} },那么所有的 â[=a=][=à=] 都表示 [=â=](同样,写成 aàâ)。

一个等价类包含哪些字符取决于语言环境,但如果语言环境没有定义给定的等价类,比如说[…],那么将使用同名的排序序列,即{{ 1}},通常与 [=a=] 相同,因为语言环境通常包含普通字符作为整理序列。

参考:Mastering Regular Expressions,3rd Edition,page 128,这是一本关于正则表达式的优秀书籍,作者了解正则表达式的最小位。