This section is based on catpages contributed by Mainichi Communications, Inc. Translated by: MYCOM team Converted by: Japanese Online Manual Project <man-jp@jp.FreeBSD.ORG> Submitted by: Kazuo Horikawa <k-horik@yk.rim.or.jp>
256 lines
8 KiB
Groff
256 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
|
|
.\"
|
|
.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
|
|
簡潔さと単純さを強調したため、それほど速くありません。単純なケースを
|
|
速く処理することに注意が向けられています。
|