電子書籍の厳選無料作品が豊富!

cgiで完全一致の検索はできましたが、あいまい検索の方法がわかりません。
たとえば、山を含む苗字の人、などがわかりません。
(山という苗字の人、はできます。)

おわかりの方、教えてください。

#perlです。

A 回答 (4件)

>if ($searchkey eq~ m/$FORM{'SYOZOKU'}/;){



これは「eq~」ではなくて「=~」ですね。
(正規表現では文字列でも「=~」を使います)
あと、こちらのミスでしたが、ifの後のカッコ内の最後のセミコロンは不要でしたね。

$FORM{'SYOZOKU'}が「総務部経理課」ということは、
$FORM{'NAME'}は「山田太郎」でしょうか。

$searchkeyがフォームから送信された内容ということなので、
この検索ワードが、データのどちらの要素にもヒットするようにするには、

if ($FORM{'SYOZOKU'} =~ m/$searchkey/ || $FORM{'NAME'} =~ m/$searchkey/) {
&ok;
}

又は

if ($FORM{'SYOZOKU'} =~ m/$searchkey/) {
&ok;
} elsif ($FORM{'NAME'} =~ m/$searchkey/) {
&ok;
}

でいいと思います。
所属の方のみにヒットさせたい場合は後半部分をカットすればいいはずです。
    • good
    • 0
この回答へのお礼

できました!
ありがとうございます!

正規表現ではeqではなく=使うんですね。(==とも違いますよね?)

両方から検索の方法まで教えていただいて本当にありがとうございました。

お礼日時:2003/02/12 15:47

再びnamiri_eです。



>#$searchkey =~ /^$searchkey.+/;
>#$searchkey =~ m/$searchkey/;
>$searchkey =~ /.*$searchkey.*/;
>
>if ($searchkey eq $FORM{'SYOZOKU'}){
>&ok;

正規表現をそのまま裸で使っているのですか?
500エラーは出てませんか?
それと、$FORM{'SYOZOKU'}はフォームから送信された語句ですよね。
すると$searchkeyはデータファイルの、例えば「山田太郎」などが入っているのですか?

その場合、
フォームから送信された$FORM{'SYOZOKU'}とマッチするものを取り出すのなら、

if ($searchkey =~ m/$FORM{'SYOZOKU'}/;) {
&ok;
}

とすればいいと思いますよ。

できれば、それぞれの変数の内容を教えていただければ助かります。
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

if ($searchkey eq~ m/$FORM{'SYOZOKU'}/;){
としてみましたが、エラー(Internal Server Error)でした。

>できれば、それぞれの変数の内容を教えていただければ助かります。

すいませんでした。
$searchkey:フォームで入力された検索キーです。
$FORM{'SYOZOKU'}:これはログファイルの中に入っているデータです。
(所属のデータ)

NAME=山田太郎&SYOZOKU=総務部経理課

というようなログでしたら、「総務部経理課」が$FORM{'SYOZOKU'}になります。

$searchkeyは検索するために入力された文字データですので、
たとえば、「経理課」と入力されたら
経理課が$searchkeyになります。

おわかりいただけたでしょうか?

お礼日時:2003/02/12 15:18

>$searchkey =~ /^$searchkey.+/;



これだと「山」で検索したときには、
「山ではじまる」ものだけにマッチしませんか?
ただ単に「山を含む」のでしたら

$searchkey =~ m/$searchkey/;
ではどうでしょう。

やって見たことはないですが
$searchkey =~ /.*$searchkey.*/;
こんなのでもできるかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

3つともやってみましたが、全部ダメでした。
(一致するものを入れた場合はきちんと結果が出る)

#$searchkey =~ /^$searchkey.+/;
#$searchkey =~ m/$searchkey/;
$searchkey =~ /.*$searchkey.*/;

if ($searchkey eq $FORM{'SYOZOKU'}){
&ok;

こんな感じにしてあります。

お礼日時:2003/02/12 13:12

$name =~ /^山.+/


でしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

検索キーが変数ですので、以下のようにしてみました。

$searchkey =~ /^$searchkey.+/;

ですが検索結果は出てきません。
なぜでしょうか?

お礼日時:2003/02/12 12:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!