jpman project specific RCS keyword (jpman %Id) is obsolete, after manual entries are stored in freefall CVS repository. This old Id is useless and more worse it confuses users and bug reporters. So, this old Id is removed. Submitted by:jpman project <man-jp@jp.FreeBSD.org>
257 lines
8 KiB
Groff
257 lines
8 KiB
Groff
.\" Copyright (c) 1991, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)regexp.3 8.1 (Berkeley) 6/4/93
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.Dd June 4, 1993
|
|
.Dt REGEXP 3
|
|
.Os
|
|
.Sh 名称
|
|
.Nm regcomp ,
|
|
.Nm regexec ,
|
|
.Nm regsub ,
|
|
.Nm regerror
|
|
.Nd 正規表現ハンドラ
|
|
.Sh 書式
|
|
.Fd #include <regexp.h>
|
|
.Ft regexp *
|
|
.Fn regcomp "const char *exp"
|
|
.Ft int
|
|
.Fn regexec "const regexp *prog" "const char *string"
|
|
.Ft void
|
|
.Fn regsub "const regexp *prog" "const char *source" "char *dest"
|
|
.Sh 解説
|
|
このインタフェースは、
|
|
.Xr regex 3
|
|
で置き換えられました。これは、互換性ライブラリ libcompat から使用できます。
|
|
.Pp
|
|
.Fn regcomp ,
|
|
.Fn regexec ,
|
|
.Fn regsub ,
|
|
.Fn regerror
|
|
は
|
|
.Xr egrep 1
|
|
スタイルの正規表現とサポート機能を実現しています。
|
|
.Pp
|
|
.Fn regcomp
|
|
は、正規表現を
|
|
.Fn regexp
|
|
タイプの構造体にコンパイルし、その構造体のポインタを戻します。スペース
|
|
は
|
|
.Xr malloc 3
|
|
で割り振られ、
|
|
.Xr free
|
|
で解放されます。
|
|
.Pp
|
|
.Fn regexec
|
|
関数は、
|
|
.Dv NULL
|
|
で終わる
|
|
.Fa string
|
|
を
|
|
.Fa prog
|
|
のコンパイル済み正規表現と突き合わせます。問題がない場合は 1を戻し、問
|
|
題がある場合は 0を戻します。また、
|
|
.Fa prog
|
|
の
|
|
.Em startp
|
|
と
|
|
.Em endp
|
|
(下記参照)の内容を調整します。
|
|
.Pp
|
|
.Fn regexp
|
|
構造体のメンバーには、最低でも以下が必要です。順番は関係ありません。
|
|
.Bd -literal -offset indent
|
|
char *startp[NSUBEXP];
|
|
char *endp[NSUBEXP];
|
|
.Ed
|
|
.Pp
|
|
.Dv NSUBEXP
|
|
は、ヘッダファイルで 10に定義されています。
|
|
.Fn regexp
|
|
を使用して
|
|
.Fn regexec
|
|
が問題なく実行されると、
|
|
.Em startp
|
|
と
|
|
.Em endp
|
|
の各ペアは、
|
|
.Fa string
|
|
のサブストリングを表します。
|
|
.Em startp
|
|
はサブストリングの第 1キャラクタを指し、
|
|
.Em endp
|
|
はサブストリングの次の第 1キャラクタを指します。0番目のサブストリング
|
|
は、正規表現全体と一致する
|
|
.Fa string
|
|
のサブストリングです。その他は、正規表現の括弧で囲まれた表現と一致する
|
|
サブストリングです。括弧で囲まれた表現には、左括弧の左から右の次数で番
|
|
号が付きます。
|
|
.Pp
|
|
.Fn regsub
|
|
関数は、
|
|
.Fa prog
|
|
を使用して最後に実行した
|
|
.Fn regexec
|
|
に従って置き換えを行ないながら、
|
|
.Fa source
|
|
を
|
|
.Fa dest
|
|
にコピーします。
|
|
.Fa source
|
|
の `&' の各インスタンスは、
|
|
.Em startp Ns Bq
|
|
と
|
|
.Em endp Ns Bq
|
|
で示されるサブストリングで置き換えられます。
|
|
.Sq \e Ns Em n
|
|
の各インスタンス(nは数字)は、
|
|
.Em startp Ns Bq Em n
|
|
と
|
|
.Em endp Ns Bq Em n
|
|
で示されるサブストリングで置き換えられます。リテラル `&' や
|
|
.Sq \e Ns Em n
|
|
を
|
|
.Fa dest
|
|
に配置するには、そのリテラルの前に `\e' を配置します。`&'や
|
|
.Sq \e Ns Em n
|
|
の前にリテラル `\e' を付けるには、その前に `\e' をもう 1つ付けます。
|
|
.Pp
|
|
.Fn regerror
|
|
関数は、
|
|
.Fn regcomp ,
|
|
.Fn regexec ,
|
|
.Fn regsub
|
|
でエラーが検出されると常に呼び出されます。デフォルトの
|
|
.Fn regerror
|
|
は、原因の適切なインジケータを使用し、ストリング
|
|
.Fa msg
|
|
を標準エラー出力に書き込んで
|
|
.Xr exit 2
|
|
を呼び出します。その他のアクションが望ましい場合、ユーザは
|
|
.Fn regerror
|
|
関数を別のものと置き換えられます。
|
|
.Sh 正規表現シンタックス
|
|
正規表現は、`|' で区切られた、 0以上のブランチです。ブランチの 1つと
|
|
一致するものと一致します。
|
|
.Pp
|
|
ブランチは、 0以上の連結したピースです。最初に一致したものと一致した
|
|
後で、次に一致したものと一致します。
|
|
.Pp
|
|
ピースは、`*' , `+' , `?' が続くことがあるアトムです。
|
|
`*' が続くアトムは、アトムの 0以上の一致のシーケンスと一致します。
|
|
`+' が続くアトムは、アトムの 1以上の一致のシーケンスと一致します。
|
|
`?' が続くアトムは、アトムの一致、または null ストリングと一致します。
|
|
.Pp
|
|
アトムは、括弧で囲まれた正規表現(正規表現の一致と一致する)、範囲(下記
|
|
参照)、`.' ( 1キャラクタと一致する)、`^' (入力ストリングの最初の null
|
|
ストリングと一致する)、`$' (入力ストリングの最後の null ストリングと一
|
|
致する)、1 キャラクタが続く `\e' (そのキャラクタと一致する)、その他の
|
|
意味がない 1キャラクタ(そのキャラクタと一致する)です。
|
|
.Pp
|
|
範囲は、`[]' で囲まれたキャラクタのシーケンスです。通常は、そのシーケ
|
|
ンスの 1キャラクタと一致します。シーケンスが `^' で始まる場合は、シー
|
|
ケンスの残りのキャラクタではない 1キャラクタと一致します。シーケンスの
|
|
2つのキャラクタが `\-' で区切られている場合、これは、その 2キャラクタ
|
|
に挟まれた
|
|
.Tn ASCII
|
|
キャラクタのリストを表します(たとえば `[0-9]' は、任意の十進数と一致し
|
|
ます)。シーケンスにリテラル `]'を組み込むには、それを最初のキャラクタ
|
|
にします( `^' がある場合はその次のキャラクタにします)。リテラル `\-'
|
|
を組み込むには、最初か最後のキャラクタにします。
|
|
.Sh あいまい性
|
|
正規表現が入力ストリングの 2つの部分と一致する場合は、最初のものと一致
|
|
します。両方が同じ場所で始まっているが長さが異なる場合、または長さが
|
|
同じで別々の場所で始まっている場合、現実は以下のように複雑になります。
|
|
.Pp
|
|
一般的に、ブランチのリストの実現性は左から右に考慮されます。`*', `+',
|
|
`?' の実現性は長いものから考慮されます。ネストされたコンストラクトは外
|
|
側から考慮されます。連結されたコンストラクトは左から考慮されます。 選
|
|
択される一致は、最初の選択肢の最初の実現性を使用するものとなります。
|
|
選択肢が複数ある場合は、最初の決定に従って、次が同じ方法(最初の実現性)
|
|
で行なわれます。残りも同じようになります。
|
|
.Pp
|
|
たとえば
|
|
.Sq Li (ab|a)b*c
|
|
が `abc' と一致する方法には 2つあります。最初の選択肢は、`ab' と `a'
|
|
の間です。`ab' が先で、問題ない一致全体をリードするので、これが選択さ
|
|
れます。`b' はすでに選択されているので、`b*' は最後の実現性(空ストリン
|
|
グ)と一致します。先の選択肢を考慮する必要があるからです。
|
|
.Pp
|
|
`|' が存在せず、`*' , `+', `?' が 1つだけ存在する場合は、最も長い一致
|
|
が選択される結果となります。`xabbbby' で提供された `ab*' は、`abbbb'
|
|
と一致します。`ab*' が `xabyabbbz' で試されると、最初のものが選択され
|
|
るので、`x' の後の `ab' と一致することに注意してください。(実際には、
|
|
一致を始める場所の決定が最初の選択肢なので、後の選択肢では、優先順位が
|
|
低い代案がリードしていてもそれを考慮する必要があります。)
|
|
.Sh 戻り値
|
|
.Fn regcomp
|
|
関数は、シンタックスエラー、システム制限の超越、
|
|
.Dv NULL
|
|
オペランドへの `+' や `*' の適用などのエラーが発生した場合は
|
|
.Dv NULL
|
|
を戻します(
|
|
.Fn regerror
|
|
が開始されます)。
|
|
.Sh 関連項目
|
|
.Xr ed 1 ,
|
|
.Xr egrep 1 ,
|
|
.Xr ex 1 ,
|
|
.Xr expr 1 ,
|
|
.Xr fgrep 1 ,
|
|
.Xr grep 1 ,
|
|
.Xr regex 3
|
|
.Sh 歴史
|
|
.Fn regcomp ,
|
|
.Fn regexec ,
|
|
.Fn regsub ,
|
|
.Fn regerror
|
|
のコードとマニュアルページは、トロント大学で作成され、
|
|
.Bx 4.3-Tahoe
|
|
に追加されました。Bell V8
|
|
.Xr regexp 3
|
|
と互換性を保つようになっていますが、Bell コードから派生したものではあ
|
|
りません。
|
|
.Sh バグ
|
|
空のブランチと空の正規表現は、V8 と互換性はありません。
|
|
.Pp
|
|
.Dv NULL
|
|
オペランドに `*' か `+' を適用することに課せられる制限は、システムを単
|
|
純にするためのものです。
|
|
.Pp
|
|
.Xr egrep
|
|
の改行で区切られたブランチはサポートされていません。V8
|
|
.Xr regexp 3
|
|
でもサポートされていません。
|
|
.Pp
|
|
簡潔さと単純さを強調したため、それほど速くありません。単純なケースを
|
|
速く処理することに注意が向けられています。
|