正則表達式
在了解正則表達式之前我們先來對幾個詞做一下解釋,以方便之后的學習
字母表:是一個有限的符號集合。典型的例子包括字母、數位、標點符號。如ASCII碼表,亦或是{0,1}這一組二進制字母表,亦或是{a,1,w,4}這一組我們自定義的字母表。這里使用的字母表是一種廣泛上的定義。
串:是字母表中符號的一個有窮序列,稱為串,通常用s表示,長度記為|s|??沾褪情L度為0的串,用ε表示。
語言:是某個給定字母表上一個任意的可數的串的集合。同樣是一個廣泛上的定義。值得注意的是空集?和僅包含空串{ε}的集合都為語言。語言直接可以進行運算。這里注意一下kleene閉包和正閉包,正閉包不包含ε,kleene閉包包含ε。
語言的運算
了解完上述的一些概念后,就可以來看一下正則表達式了。
正則表達式是一種規則表達式,用來對語言進行匹配,假如一個正則表達式為r或是s,那這個正則式可以表示語言L( r )或L(s)
一些規則:
- ( r ) | ( s ) 是一個正則表達式,表示語言 L( r ) ∪ L( s )
- ( r )( s ) 是一個正則表達式,表示語言 L( r )L( s )
- ( r )* 是一個正則表達式,表示語言 (L( r ) )*
- ( r ) 是一個正則表達式,表示語言 L( r )
基本運算
正則運算規律
在這之后,又對基本的正則表達式進行了擴展,分別為
- 一個或多個實例:( r )+ 是一個正則表達式,表示語言 (L( r ))+ 。r* = r+ | ε
- 零個或一個實例:r? 等價于 r | ε
- 字符類:a | b | c | d | ... | z 可以表示為 [abc...z]