     regexp(3)              MudOS (5 Sep 1994)               regexp(3)

     名稱：
          regexp() - 正規描述式(regular expression)處理程式

     語法：
          string *regexp( string *lines, string pattern, void | int
          flag );

          字串 *regexp( 字串 *lines, 字串 pattern, 無參數 | 整數 flag );

     用法：
          一般而言，當以多行文字的陣列和正規描述式表達時，regexp(3) 會
          傳回一個含有那幾行符合指定的正規描述式文字之陣列。如果 flag
          （預設值 0）的位元 2 被設定，則將傳回不符合者而非符合者。而
          如果 flag 的位元 1 被設定，則會傳回這般格式 ({ 註標 1 + 1,
          符合 1, ..., 註標 n + 1, 符合 n }) 的陣列，這裡的註標 1 是指
          第一個符合或是不符合者在文字行陣列中的註標(index)。

     正規描述式語法：
          一個正規描述式含有零個或是多個由 `|' 分隔的分段(branch)。它
          可配對任何符合這些分段之一。

          一個分段是由零個或多個部份(piece)相連成的。它可配對依序符合
          第一個單元、第二個單元等等。
          
          一個部份是一個可以接著 `*'、`+' 或 `?' 的單元(atom)。一個接
          著 `*'的單元可配對一串零個或是多個符合的單元。一個接著 `+' 
          的單元可以配對一串一個或多個符合的單元。一個接著 `?' 的單元
          則可以配對一個單元或是空字串。

          一個單元可以是一個在括弧中的正規描述式（配對這個正規描述式）
          、一個範圍(range)（後面會說明）、`.'（配對任何單一字元）、
          `^'（配對輸入字串開頭的空字串）、一個接著單一字元的 `\'（配
          對這個字元）或是一個沒有特殊意義的單一字元（配對這個字元）。

          一個範圍是一串包含在 `[]' 內的字元。它一般是配對任何在序列中
          的任何單一字元。如果這個序列是以 `^' 開始，則它只能配對不是
          來自序列後半部的任何字元。如果在序列中的二個字元被 `-' 所分
          隔的話，則這是個含有介於它們間所有 ASCII 字元的簡寫（例如，
          `[0-9]' 可配對任何十進位數字）。要在序列中包含字元 `]'的話，
          就要將它放在第一個或是最後一個字元。

     不明確性(ambiguity)：
          如果一個正規描述式可以符合輸入字串的二個不同部份，則它將只
          會配對較早開始的那個。若二個都在相同位置開始但符合長度不同
          ，或是符合方法不同而同長度的話，情況就會變的很複雜，詳述如
          下：

          一般上來說，一串分段的可能性是依由左至右的順序，`*'、`+' 和
          `?' 總是儘量地配對最長的字串，巢狀結構則會由外層開始，而連
          結(concatenated)的結構是由最左邊的開始。將會選用的配對是使
          用了最早可能性的選擇。如果有多於一個選擇，則下一個也會因第
          一個選擇而採取同樣的方法（最早可能性），一直持續下去。

          舉例來說，`(ab|a)b*c' 可以有二種方式配對 `abc' 。第一個選擇
          是 `ab' 或 `a'；因為 `ab' 較早符合而且可以配對成功，所以它
          被選用。由於 `b' 已被配對，所以 `b*' 必須配對它最後的可能－
          －空字串，因為它必須遵從較早的選擇。

          一個沒有 `|' 而只有一個 `*'、`+' 或 `?' 的特殊情況，它的淨
          效應是最長可能配對將會被選用。因此，對 `xabbby' 來說，`ab*'
          將會配對 `abbbb'。注意到如果改對 `xabyabbbz' 來說，它將只
          會配對到 `x' 之後的 `ab'。（結果是，決定從哪裡開始配對是第
          一個要做的選擇，因為其後的選擇也必須遵從它，甚至如果這只是
          個不太好的決定。）

     參考：
          sscanf(3), explode(3), strsrch(3), ed(3)

     翻譯：
          Kenny@Broken.History       97.Jul.26       (printed 3/16/95)
