正規表示法(regular expressions)是透過代數來描述語言的一種表達方式, 是在電腦科學被廣為使用的一個概念,此處將會對其作說明
1. 定義
1. 基本定義
- 空集合是正規語言
 - 只包含一個空字串的語言是正規語言
 - 對任意(字母表集合),是正規語言
 - 若A, B是正規語言,則再經過正規語言的運算後依然是正規語言
 - 除此之外都非正規語言
 
2. 符號定義
通常以一個英文字母來代表一個正規表示式,例如a, 而L()就表示一個正規表示式能表達出來的語言(language), 故L(a)代表a這個正規表示式所能表示的語言。
3. 正規語言的運算
正規語言的運算分為
- 
    
聯集(Union) Union (U): 就是把兩個language做聯集. 舉例來說:
 - 
    
串接(Concatenation) 把兩個language做連接,這邊的連接不是單純的將兩個正規語言所代表的集合串在一起,而是將元素中的元素作串接。 舉例來說: 語言L跟語言M作串接
則
 - 
    
克萊尼星號(Kleene Star) Kleene Star (*): * 表達空集合或是一個L以上的集合聯集的任何子集合。
舉例來說:
 
2. 引入自動機討論
1. 用$\epsilon-$NFA表示正規表示法
- 基本定義
    
- 邊線(arc)代表一個symbol,用以連接狀態(state)
 - 
        
節點(node)代表automata的狀態
我們可以透過下面將任意的正規表示法轉換成$\epsilon-NFA$

 
 - 延伸
    
- 
        
聯集(Union): 利用symbol為空字串的arc來造成分支

 - 
        
串接(Concatenation): 狀態以一symbol為空字串的arc連接

 - 
        
克萊尼星號(Kleene Star): 形成迴圈,造成封閉(closure)

 
 - 
        
 
2. 用DFA表示正規表示法
- 基本定義:
    
- 邊線(arc)代表一個symbol\label,用以連接狀態(state)
 - 節點(node)代表automata的狀態
 - DFA所能接受的路線(path)就是我們的語言(language)
 
 - k-path:
    
- 
        
定義:
k-path指的是在DFA上不經過狀態編號大於k的路徑,其中終點並不設限,可以是任意的狀態。
 - 
        
例子:

 
 - 
        
 - 歸納推導
令$R_{ij}^k$是從狀態$i$到狀態$j$的k-paths的正規表示法,其初始條件如下:
    
- $k=0$ 時,
 
接著可以由此推導出 $R_{ij}^k = R_{ij}^{k-1} + R_{ik}^{k-1}(R_{kk}^{k-1})^*R_{kj}^{k-1}$
$R_{ij}^{k-1}$: 從i到j不經過大於k狀態的path
$R_{ik}^{k-1}$: 從i到k不經過大於k狀態的path
$(R_{kk}^{k-1})^*$: 從k到k不經過大於k狀態的path(零到多次)
$R_{kj}^{k-1}$: 從k到j不經過大於k狀態的path
 - 
    
圖解

 
Stanford Online Course: Automata Theory
自動機理論-Automata筆記-第二週: Regular Expression
圖片來源: