CGI-BBS > データベース > CGI検索 > 自作検索エンジンについて


カレッヂ
カレッヂ


質問者 らんきー  投稿日 5/18(日) 16:15:31
perlで自作検索エンジンを作っています
ここで、殆どの場合において検索はうまくいってるのですが
『(』や『[』を閉じないでの検索ではサーバーエラーになってしまいます

自分で考えてみたのですが
・・・・・

foreach  (@data){
  if($_ =~ /$form{'word'})

・・・・・
(補足しますと$form{'word'}には検索ワードをうけとってデコードしたものが入ります)
のように全文検索をかける際に
$form{'word'}に『(』代入されるので
正規表現上でのグループ化に用いる『(』とプログラム側が理解してしまい
閉じてないということでエラーを返すのかなと思いました

ただ、この考えですと『{』や『#』や『;』でもエラーが出そうなものですが
このとき検索自体はうまくいってませんでしたが、エラーは出ませんでした

無料配布されている検索エンジンCGIをみたところ
index関数を使っているようで、こちらを使えばうまくいくかもしれませんが
違いがわからず、気になって投稿させて頂きます


質問をまとめさせて頂きますと
1.『(』や『[』を閉じないばあい単純な $a=~ /strings/ のような形でダメなのは
   私の考え通りが原因なのでしょうか?

2.なぜ『{』や『#』や『;』では、なぜエラーが出ないのでしょうか?
   また、なぜ検索はうまくいかないのでしょうか?

3.index関数では内部的には $a=~ /strings/ とは違うことをやっているのでしょうか?


説明足らずの部分があるかもしれませんが
その点はおっしゃって頂ければ補足いたします
どれか一個だけでも良いですし、できる限りの解答でよいので
どなたか解答頂けたら幸いです
宜しくお願い致します

perl ver5.6

プロバイダ参照:http://support.biglobe.ne.jp/
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:メモ帳
FTPソフト:FFFTP
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 しあわせのツボ  [削除]  投稿日 5/18(日) 19:56:03
1.その通りです。私もよくこれで泣きます。
2.それらの記号は正規表現中に単独で出て来ても意味を持たないからです。
 ただ、正しく検索されない理由はこれだけではわかりません。
 「うまくいきません」ではなく「○○が××になってしまいます」のように
 具体的に書いてください。
3.私の憶測でしかありませんが、違わないと思います。
 根性があればPerl自体のソースコードを見て調べることもできます(笑)

おまけ:quotemetaという関数について調べてみると幸せになれるかもしれません。
質問者 らんきー  [削除]  投稿日 5/19(月) 23:38:33
すばやい解答本当にありがとうございます
quotemetaを調べたらかなり幸せになれちゃいました
ご教授心から感謝致します


また、言葉足らずだった点をお詫びさせて頂きます
うまくいかないとは

「#を検索にかけた際にすべてのデータがヒットしてしまう」

ということです
『{』や『;』においては私の勘違いだったようで
正常に動いているようです
これもお詫びさせて頂きます


余談となりますが
自分の推測が正しかったとわかったので
あらためてソースを見直したところ
幸運なことに、正規表現中であるといったことなどで
『{』などが代入されて誤動作を起こすような場面はありませんでした
今後は文字の代入が行われる場面では
変数の扱いに注意しようと思います

返信(回答)する

 


Web裏技