#2 Article 2104 Posted at 1994/12/04 11:55:14 by SysopMick'n (MAP001) [SEARCH]
Subject: Re: Re: bbs 検索機能のダイレクトコマンド /2103 /2098
書き方が悪かったですね^^;
>> -key=KEYWORD
>「KEYWORDを含む文字列」って指定は出来ますか?
-key=KEYWORD による指定がまさにそれです。
たとえば、-key=CDE だと、ABCDE 、CDE 、CDEFG などのキーワードに
ひっかかります。
- * -
>それから正規表現とは何ですか?
「~なパターンの文字列」といった指定方法をするためのものです。
たとえば、正規表現を使うと、
例 1: 先頭が A で始まる文字列
例 2: 先頭が A 、2 番目が任意の文字、3 番目が C である文字列を
含む文字列
例 3: NO.40 NO.41 NO.42 ~ NO.49 のどれか
例 4: ABC または DEF を含む文字列
といったものを指定することができます。
egrep や sed などのコマンドでよく使われているものです。
「ワイルドカード」というものをご存知かと思いますが、* や ? 以外に
「先頭」とか「~に属する文字」などの指定が可能になっているもの、と
考えるのもいいかもしれません。
で、具体的に上記の 3 つの例を表わす正規表現は以下のようになります。
例 1: ^A
^ は「文字列の先頭」を表わすものです。
^ABC だと、「先頭が ABC で始まる文字列」になります。
また、$ を使って「文字列の最後」を指定することもできます。
A$ だと、「最後が A である文字列」になります。
例 2: A.C
2 番目の . が「任意の文字」を表わすものです。
DOS のコマンドラインでのワイルドカードの ? に相当します。
じゃあ、. (ピリオド) という文字を特定するには? となりますが、
これは、\. というように . の前に \ を置きます。\ によって、
. が持つ特殊な意味を打ち消します。
例 3: NO\.4[0-9]
まず、NO\.4 までの部分で NO.40 や NO.41 などの先頭 4 文字を
指定します。
続く [0-9] が、「0 から 9 の範囲にある任意の一文字」を
表わします。
この [ ] は「~に属する文字」を表わします。
[0123] のように文字を [ ] の中に並べると、0 または 1 または...
という意味になりますす。[ABCDEFGHIJKLMN] などと指定すると、
A から N までの任意の1文字になりますが、並べるのを省略して
表わす方法として - を使うことができます。これにより [A-N] と
略記可能です。
[012A-Z] のように組み合わせることもできます。
逆に、「~に属さない文字」を表わすこともできます。
[^0123] のように [ の直後に ^ を続けると、0 でも 1 でも 2 でも 3
でも「ない」任意の一文字の意味になります。
例 4: ABC|DEF
| によって「または」を表わします。
まとめると、
^ 文字列の先頭
$ 文字列の最後
. 任意の一文字
[...] ... 内の文字に属する任意の一文字
[^...] ... 内の文字に属さない任意の一文字
| 「または」
となります。応用として、
^$ 空文字列 (キーワードがついていないアーティクル)
^NO\.[0-9][0-9]$ NO.01 や NO.14 のみを検索、GNO.01 や GNO.14 は
検索しないようにする
bbs コマンドで使うには、
bbs allread -key=/^AB/ #board ..
のように、正規表現を / と / で囲んで指定します。
SysopMick'n (MAP001)
p.s.検索のバグ:
「ボード #xxx(ボード名)には、アーティクル No.1234はありません。」
といったエラーメッセージのようなものが出ることがありますが、これは、
「これ以上見つかりません」という意味で表示されています。深く気にせず、
「ああ、これ以上は見つからなかったんだな」と思って下さい(^^;)