正規表示式與 Kleene 定理

聯集運算

有時一個樣式允許不止一種可能,就像一張表單接受「先生」或「小姐」。正規表示式中的聯集運算就是用來說「這個樣式或那個樣式」的方式。如果你能分別描述兩個字串家族,聯集就讓你接受來自任一家族的任何字串。

若 R 與 S 是正規表示式,聯集 R+S(在程式設計中常寫成 R|S)標示它們語言的集合聯集:一個字串符合 R+S,恰好當它符合 R 或符合 S(或兩者皆是)。以集合記號寫成 L(R+S) = L(R) ∪ L(S),其中 ∪ 是集合聯集。例如在 {a, b} 上,表示式 a+b 標示 { a, b },而 (ab)+(ba) 標示 { ab, ba }。聯集是正規表示式中直接對應日常用語「或」的運算子。

聯集滿足交換律與結合律(選項的順序與分組無關緊要),也滿足冪等律:R+R 標示與 R 相同的語言,因為集合與自身的聯集不增添任何東西。空集 ∅ 是它的單位元素:R+∅ 標示與 R 相同的語言,因為聯集進「沒有字串」並不會改變什麼。這些事實是正規表示式代數的一部分,能讓你化簡龐大的表示式。

表示式 (a+b+c)* 標示三字母字母表 {a, b, c} 上的所有字串:在每個位置你可以選 a 或 b 或 c,重複零次或多次。若沒有聯集,你就得手動列舉每一種組合。

聯集把「這些選擇中任一個」打包進一個符號裡。

聯集對應集合聯集,因此具冪等性:作為語言 R+R = R。這與算術的「+」不同,後者 x+x = 2x。符號是借來的,但意義是集合論裡的「或」。

又称
alternation選擇或運算