aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man3/regexp.3
blob: 3efde85dbd52cbd5f9b9e2b461265440fa0f31f6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
.\" 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
簡潔さと単純さを強調したため、それほど速くありません。単純なケースを
速く処理することに注意が向けられています。