正则表达式整理符号

MFr*_*one 5 regex bash

我试图了解“整理符号”匹配的工作原理,但我没有弄明白。我明白这意味着匹配一个精确的序列,而不仅仅是字符,即:

echo "ciiiao" | grep '[oa]'     --> output 'ciiiao'
echo "ciiiao" | grep '[[.oa.]]' --> no output
echo "ciiiao" | grep '[[.ia.]]' --> output 'ciiiao'
Run Code Online (Sandbox Code Playgroud)

但是,第三个命令不起作用。我错了还是我误解了什么?

我已经阅读了这个正则表达式教程

mik*_*n32 6

当有向图被视为语言中的单个字符时,通常会使用整理符号。它们是POSIX 正则表达式规范的一个元素,并没有得到广泛支持。

例如,威尔士字母表中有许多有向图被视为单个字母(下面用 * 标记)

a b c ch d dd e f ff g ng h i j l ll m n o p ph r rh s t th u w y
       *           *    *          *          *    *      *
Run Code Online (Sandbox Code Playgroud)

假设语言环境文件定义了它(整理符号只有在当前语言环境中定义时才有效),整理符号[[.ng.]]被视为单个字符。同样,像.或这样的单个字符表达式也[^a]将匹配“ff”或“th”。这也会影响排序,因此[p-t]除了预期的单个字母外,还将包括二合字母“ph”和“rh”。