• ベストアンサー

cgiであいまい検索(~を含む)

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

質問者が選んだベストアンサー

  • ベストアンサー
  • namiri_e
  • ベストアンサー率37% (37/98)
回答No.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; } でいいと思います。 所属の方のみにヒットさせたい場合は後半部分をカットすればいいはずです。

KODAMAR
質問者

お礼

できました! ありがとうございます! 正規表現ではeqではなく=使うんですね。(==とも違いますよね?) 両方から検索の方法まで教えていただいて本当にありがとうございました。

その他の回答 (3)

  • namiri_e
  • ベストアンサー率37% (37/98)
回答No.3

再び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; } とすればいいと思いますよ。 できれば、それぞれの変数の内容を教えていただければ助かります。

KODAMAR
質問者

お礼

何度もありがとうございます。 if ($searchkey eq~ m/$FORM{'SYOZOKU'}/;){ としてみましたが、エラー(Internal Server Error)でした。 >できれば、それぞれの変数の内容を教えていただければ助かります。 すいませんでした。 $searchkey:フォームで入力された検索キーです。 $FORM{'SYOZOKU'}:これはログファイルの中に入っているデータです。 (所属のデータ) NAME=山田太郎&SYOZOKU=総務部経理課 というようなログでしたら、「総務部経理課」が$FORM{'SYOZOKU'}になります。 $searchkeyは検索するために入力された文字データですので、 たとえば、「経理課」と入力されたら 経理課が$searchkeyになります。 おわかりいただけたでしょうか?

  • namiri_e
  • ベストアンサー率37% (37/98)
回答No.2

>$searchkey =~ /^$searchkey.+/; これだと「山」で検索したときには、 「山ではじまる」ものだけにマッチしませんか? ただ単に「山を含む」のでしたら $searchkey =~ m/$searchkey/; ではどうでしょう。 やって見たことはないですが $searchkey =~ /.*$searchkey.*/; こんなのでもできるかもしれません。

KODAMAR
質問者

お礼

回答ありがとうございます。 3つともやってみましたが、全部ダメでした。 (一致するものを入れた場合はきちんと結果が出る) #$searchkey =~ /^$searchkey.+/; #$searchkey =~ m/$searchkey/; $searchkey =~ /.*$searchkey.*/; if ($searchkey eq $FORM{'SYOZOKU'}){ &ok; こんな感じにしてあります。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

$name =~ /^山.+/ でしょうか?

KODAMAR
質問者

お礼

回答ありがとうございます。 検索キーが変数ですので、以下のようにしてみました。 $searchkey =~ /^$searchkey.+/; ですが検索結果は出てきません。 なぜでしょうか?

関連するQ&A