正規表示式與 Kleene 定理

加號運算子(plus operator)

Kleene 星號說「零次或多次」,但你常常想要「至少一次」,例如要求姓名欄位至少有一個字元。加號運算子正是這個情形的便利簡寫:「一次或多次重複」。它讓你免於把同一個樣式寫兩遍。

若 R 是正規表示式,R+(寫成上標的加號,這裡就用 R 後接一個加號)標示由 L(R) 中取出一個或多個字串串接而成的每個字串。它的定義恰好是 RR*:一個必備的 R 複本,後面接著零個或多個進一步的複本。所以 a+ 標示 { a, aa, aaa, ... },而且和 a* 不同,它排除空字串 ε,除非 ε 本身恰好在 L(R) 裡。星號與加號的全部差別,僅僅在於是否包含空的那一種情形。

要小心:這裡的加號與聯集所用的字元相同,所以由上下文決定意義。作為兩個表示式之間的二元運算子時,R+S 表示聯集;作為一個表示式之後的後綴運算子時,R+ 表示一次或多次。多數理論教科書偏好用 + 寫聯集、用上標加號寫一次或多次,而許多程式設計 regex 引擎則用直線 | 寫聯集、把 + 保留給一次或多次。加號運算子是衍生的簡寫,不是第四種基本運算:任何用 + 寫的東西,你都能改用星號與串接改寫。

在數字上,(0+1+2+3+4+5+6+7+8+9)+ 標示每個非空的數字字串,也就是每個寫出來的自然數。結尾的加號禁止了空字串,這很合理,因為「」不是一個數。

R+ 就是 RR*:一個必備的複本,再加零個或多個。

加號是多載的:在兩個表示式之間表示聯集,在一個表示式之後表示一次或多次。加號運算子不增添超出星號的能力,純粹是簡寫。

又称
one-or-moreKleene plus一次或多次Kleene 加號