正则表达式与扩展正则表达式详解
1. 引言
在编程领域,我们常听到“正则表达式”这个术语。不过,实际使用的“正则表达式”和理论上的有所不同,实际应用中的“正则表达式”通常被称为正则表达式(regex)。正则表达式在众多环境中广泛应用,像 Perl、Python、Awk、egrep、lex、vi、emacs 等。它的发展受到理论正则表达式的影响,例如 Lex 中的正则表达式就和理论正则表达式相似,但在其他很多环境中,正则表达式差异较大。
如今许多正在使用的正则表达式能够表达比正则语言更大的语言族。比如,Perl 正则表达式可以表达 $L_1 = {a^nb a^n | n \geq 0}$ 和 $L_2 = {ww | w \in {a, b}^ }$,但无法表达语言 $L_3 = {a^n b^n | n \geq 0}$。证明一个语言能否用正则表达式表达,情况有所不同。证明一个语言可以用正则表达式表达相对容易,例如 $L_1$ 可以用 Perl 正则表达式 $(a^ )b\1$ 表达,$L_2$ 可以用 $((a|b)^*)\1$ 表达;但证明一个语言不能用某些工具表达通常比较困难,比如证明 $L_3$ 不能用 Perl 正则表达式表达。因此,对正则表达式进行形式化处理很有必要。
2. 正则表达式与扩展正则表达式的基本定义
2.1 字符集定义
设 $\Sigma$ 是所有可打印字母的有序集合,但以下字母前面需加转义字符 \:(, ), {, }, [, ], $, |, \, ., ?, *, +。此外,$\Sigma$ 还包括 \n 和 \t,分别表示换行符和制表符。
超级会员免费看
订阅专栏 解锁全文

1171

被折叠的 条评论
为什么被折叠?



