
勉強する間もなく手探りでフリーCGIの改造をさせて頂いています。
if ゃ foreach などは分かりやすいですが、変数の意味が良く理解できていません。
どうぞお力添えをお願い致します。
現在、フリーのCGIでデータ登録と検索をしていますが、大文字と小文字の
区別を無くしたものにするにはどうすればよいでしょうか?
1) AbcDe も abcde も同じにしたい。
2) 可能なら全角と半角も区別無しにしたい。
ただ、2の方は漢字も使うので難しいでしようか?
iオプションを使えとの記述を見ましたが、どこを変えるのか解りません。
ソースを載せますので、ご指導宜しくお願い致します。
# 入力内容を整理
$in{'word'} =~ s/\x81\x40/ /g;
@wd = split(/\s+/, $in{'word'});
@find=(); $i=0;
# 検索処理
foreach (@line) {
$flag = 0;
foreach $wd (@wd) {
if (index($_,$wd) >= 0) {
$flag = 1;
if ($in{'cond'} eq 'OR') { last; }
} else { $andor="and 検索";
if ($in{'cond'} eq 'AND') { $flag=0; last; }
$andor="or 検索";
}
}
# ヒットした場合
$view = $in{'viewc'};
if ( $view eq '' ) { $view = $views }
if ($flag) {
$i++;
next if ($i < $page + 1);
next if ($i > $page + $view);
push(@find,$_);
}
}
# 検索終了
No.4ベストアンサー
- 回答日時:
ShiftJIS コードの場合、漢字コードの2バイト目に正規表現の区切り文字やメタ文字と同じ
コードがあるためうまくいかないことがあります。英単語のみ正規表現を使って、それ以外は
index を使えばうまくいくかもしれません。
> if (index($_, $wd) >= 0) {
上の行を次のように変更してみてください。なお、英単語に can't や Dr. などがある場合は、
/^\w+$/ を /^[\w.']+$/ などに変更する必要があります。
if ($wd =~ /^\w+$/ ? $_ =~ /$wd/i : index($_, $wd) >= 0) {
この回答への補足
レスありがとうございます。
早く試したくてワクワクしているのですが、今日は時間が取れそうに
無いので、明日以降に試させて頂きたいと思います。
ぜひ、英単語に can't や Dr. などがある方で試したいと思ってます^^
また結果報告させていただきます。
先程、時間が空いたので試してみました。
とても上手く行きました。
非常に使いやすくなりました。
本当にありがとうございました。
if ($wd =~ /^\w+$/ ? $_ =~ /$wd/i : index($_, $wd) >= 0) {
を自分でサクサク書けるように、時間を作って勉強したいと思います。
No.3
- 回答日時:
index($_, $wd) >= 0
の部分を
$_ =~ /$wd/i
とすればどうでしょ。
間違ってたらすみません。
この回答への補足
レスありがとうございます。
index($_, $wd) >= 0
の部分を
$_ =~ /$wd/i
に変えると、英小文字の大文字と小文字の区別はなくなりました。
ただ、副作用でしょうか…全角文字を混ぜた検索をすると、上手く動作しない場合が多いです。
まだ上手く行かないときのパターンがよく分からないので、調べてみます。
検索用語でNGな時とOKな時を比較すると「ー」の含まれた場合に
上手く行かないようです。
「スタート」とか、「パレード」の「ー」です。
何か対処方法がございましたらご教示お願い致します。
それと不思議なのですが、何故 $_ =~ /$wd/i を index($_, $wd) >= 0
のように記述されていたのでしょうか?
簡単に略していたなら分かるのですが、文字数増えてますよね?
どんな意図があるのでしょう…
No.1
- 回答日時:
えーとPerlですね。
Perlは読むだけでもうぎゃーですのでとりあえず参考になりそうなサイト見つけたので見てみてください。Perlメモ:http://www.din.or.jp/~ohzaki/perl.htm
ここに全角を半角にする方法などが乗ってます。ただし、jcode.pl使ったりなので、そのままでは環境によっては無理かも。
iオプションを使えというのは正規表現のiオプションを使えという意味です。
正規表現についてはこちらを参照。
正規表現 [Perl講座 -Smart]:http://www.rfs.jp/sb/perl/02/09.html
えーっと比較してるところは、、、index($_, $wd) >= 0っぽいのでここをオプションiの正規表現に変えたらどうでしょう。
この回答への補足
レスありがとうございます。
教えていただいたページ読ませていただきましたが、知識不足も甚だしく
記述形式が分かりませんでした。
まずは大文字と小文字の区別をせずに検索するようにしたく思いまして、
パターンマッチ m// 演算子でオプション「i」を使うのは分かったのですが
具体的な記述はどうすればよいのでしょうか?
いくつか試してみたのですが記述が不味く、CGI自体にアクセスできなくなってしまいました。
お手数お掛け致しますがどうぞ宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
utf-8でメールを送信すると件名...
-
応募フォームなどの住所欄で最...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
バイナリとBCDコード
-
COBOLのCOMP形式について
-
「1TB」のHDDに日本語は何字入...
-
PNGを24bppBMPに変換したいので...
-
int型(2バイト)データの分割
-
全角半角を調べるライブラリ関...
-
Line Inputにて改行があっても...
-
半角、全角の判別方法
-
PHPのCookieが有るか無いかで、...
-
Excel 1セル当りの文字数が2...
-
COleDateTime とtime_t
-
C言語の勉強しています。すみま...
-
CSVファイルの行と列のセルって...
-
'dataType' 引数を Null にする...
-
任意のアルファベットの2進表...
-
VB.NET LeftBの代用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ESC/Pのテキスト印字の制...
-
utf-8でメールを送信すると件名...
-
&jcode'convert(しても文字化け...
-
SQLServerへの出し入れで文字化け
-
CGI(Perl)の文字化けについて
-
文字コードsjisをUTF8に書き換...
-
CGIフォームから飛ばすメールが...
-
postmail ver4.3でメールを送る...
-
perlで英数字を取り出すには?
-
大文字と小文字を区別しない検...
-
cgiでの文字化け
-
応募フォームなどの住所欄で最...
-
PerlのCGIで全角スペースを入れて
-
Perlのcgi-lib.plでデコードさ...
-
これはなんて文字コードかわか...
-
CGIメールフォームのメールが文...
-
HttpURLConnection転送で漢字表示
-
CGIプログラムを使った申し込み...
-
CGIで記述した文字が 化け...
-
perl cgi のエンコード SHIFT...
おすすめ情報