• ベストアンサー

完全一致のデータだけを検索でヒットさせる!

(1) <input type="hidden" name="word" value="大阪市"> (2) if ($wd =~ /^[\w.']+$/ ? $address =~ /$wd/i : index($address, $wd) >= 0) (1)のHTMLタグから受け取った「大阪市」を(2)のCGIによってデータ検索します。 東大阪市だと問題ないのですが、大阪市だと東大阪市も一緒にヒットしてしまいます。 何処を書きかえれば良いか教えて下さい。お願いします。

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

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

書いた直後に気づいたんですが、このindex文だと「東大阪市○○区」みたいなのにも引っかかっちゃいますね 特に理由が無いなら、普通に文字列比較した方がいいと思います。 if ($wd =~ /^[\w.']+$/ ? $address =~ /$wd/i : index($address, $wd) >= 0) ↓ if ($wd eq $address)

qwert789
質問者

お礼

ご教示ありがとうございます。 たしかに if ($wd eq $address) で問題は解決ですよね! 頭が凝り固まっていたようで発想の転換が出来ませんでした^^; ありがとうございましたm(_ _)m

その他の回答 (3)

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.4

$addressにはどのような形式の住所が入っているのでしょうか? 例えば市の前に都道府県があるとか、 「大阪府大阪市旭区・・・」 いきなり市から始まっているとか、 「大阪市旭区・・・」 郵便番号+空白の後に続いているとか、 「〒654-4871 大阪市旭区・・・」

qwert789
質問者

お礼

レスありがとうございます。 if ($wd eq $address) で問題解決です! ..

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.3

よくわからないですが、そのまま検索では駄目なんでしょうか。 $html =~ /value="大阪市"/ $wdに名前が入っているなら、文字列の比較演算子はeqです。 $wd eq "大阪市"

qwert789
質問者

お礼

ご教示ありがとうございます。 if ($wd eq $address) で問題解決です!

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

これだけだと、ちょっと情報が少ないかなとは思います。 以下は、推測込みで とりあえず$wdにvalue(ここでは大阪市)が、$addressに東大阪市なり那覇市なりが入ってるんだと理解しました。 んで、そのvalueで使われている文字種によって正規表現判定かindex判定か分けると。 となると多分、この2箇所の判定を厳しくしてやれば済むんじゃないでしょうか <変更1> $address =~ /$wd/i ↓ $address =~ /\A$wd\z/i <変更2> index($address, $wd) >= 0 ↓ index($address, $wd) == 0 Perlの文法はかじったぐらいなので、お手元の環境で動作確認をお願いします。

関連するQ&A