• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:表現の抽出)

ウィンドウズの環境でPerlを使って表現の抽出方法は?

blue-horseの回答

回答No.1

「うまくいきません」の内容も書いておいた方が、状況が判り易いかと思います。 まったく検索にヒットしないのか、ヒットするが件数が足りないのか、ヒットするが出力が意図した内容と異なるのか、…etc. 回答でなくごめんなさい。 以上、失礼いたします。

hiromi310
質問者

補足

いえ、こちらのほうこそ説明不足で、すみませんでした。 今の場合、「コンピューター」も含めて検索に入れると、全くヒットしないで、下記のような文章が出てきます。 Unmatched [ in regex; marked by <-- HERE in m/Rs[ <-- HERE ^[/at C:\Perl\test\search.pl line7. 「コンピューター」を抜くと、問題なく全ての語がヒットしました。

関連するQ&A

  • 検索時エラー

    はじめまして PHPを用いてsystem.csv内を検索するんですが、ある文字を入力すると Warning: eregi() [function.eregi]: REG_BADRPT と表示されてしまいます。 例えば: 藤、++ などです。 なぜでしょうか? またどのように修正してあげたらいいのでしょうか? よろしくお願いいたします。 <?php if($_GET["key"]==""){ print"キーワードを入力してくださいね"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto"); $Result=array(); $Data=file("system.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); if(eregi($KeyWord,$lines,$text_b)){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<sizeof($Result);$i++){ $line=explode(",",$Result[$i]); ?> <li><?=$line[2]?><a href="item.php?id=<?=$line[0]?>"><?=$line[1]?></a></li> <?php } } } ?>

    • 締切済み
    • PHP
  • スペース区切りの絞込検索

    現在CSVファイルを利用した簡易検索を作っています。 他の質問にも似たようながありましたがsqlの知識もなく理解できなかったので新規で質問致しました。 複数のキーワードをどうしてもスペース区切りでの絞込検索ができなく悩んでいます。 大変恐縮ですが、お知恵をお借りできればと思い 書き込みさせていただきました。 現在自分で書いたコードは下記です。 大変お手数ですがお教えいただけると幸いです。 宜しくお願い致します。 <?PHP $KeyWord=$_GET["key"]; $ArrKeyword=explode(" ",$KeyWord); $f = 0; $Data=file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=$Data[$i]; for($n=0;$n<sizeof($ArrKeyword);$n++){ //このあたりが理解できていません・・ if(mb_eregi($ArrKeyword[$n],$line)){ $lines = $line; } $kensaku_kekka[$f] = $lines; $f = $f+1; break; } } print_r($kensaku_kekka); ?>

    • ベストアンサー
    • PHP
  • CSVファイルの10件表示について

    PHP初心者です。 CSVデータを活用してサイトを作ろうとしているのですが、 フリーワードで検索すると下記のようなエラーが出てしまいます。 Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 77287300 bytes) in レンタルサーバー(ロリポップ)に memory_limitについて問い合わせたところ、 消費メモリを削減して対処してほしいと言われました。 10件だけ表示するようにすれば解決するかと思い、 自分なりにあれこれいじってみたのですが、 うまくいきませんでした。 10件だけ表示する方法やメモリ消費を抑える方法を お分かりになる方がいらっしゃいましたら、 ぜひご教授お願いいたします。 -index.php-トップページ <form action="search.php" method="get"><input type="text" name="key" size="90"> <input type="submit" name="submit" value="検索"></form> -seach.php-検索結果表示ページ <?php if($_GET["key"]==""){ print"キーワードを入力してください"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"Shift_JIS"); $KeyWord=mb_convert_kana($KeyWord,s); $ArrKeyword=explode(" ",$KeyWord); $Result=array(); $Data=file("item.csv"); for($i=0;$i<sizeof($Result);$i++){ $lines=strip_tags($Data[$i]); $Match=true; for($n=0;$n<sizeof($ArrKeyword);$n++){ if(!eregi($ArrKeyword[$n],$lines)){ $Match=false; break; } } if($Match==true){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <ul> <?php for($i=0;$i<sizeof($Result);$i++){ $line=explode(",",$Result[$i]); ?> <li><a href="item.php?id=<?=$line[0]?>"><?=$line[3]?></a></li> <?php } } } ?> 下記の行がエラーのようです。 for($i=0;$i<sizeof($Result);$i++){

    • ベストアンサー
    • PHP
  • 正規表現<置き換え>が実行してくれません

    次のようなスクリプトで、改行マーク\nがたくさんある1行データを<BR>に置換しようとしましたが、表示は\nのままです。原因が分かりません。たぶんこの肝心の箇所のスクリプト・エラーだと思いますが、自分で発見できません。どなたかお教え下さい。 print "Content-type: text/html; charset=sjis-jp\n\n"; print "\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE></TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; # 辞書を読む #ファイルの各行を配列に一括して読み込む。 open(IN, "GermJ.txt"); @list = <IN>; close(IN); $max = $#list; for ($i=0; $i<$max; $i++) {$data = @list[$i]; if (index($data, $tango.' /// ')==0) {$data=~ s/ \n/<BR>/g; print "$data\n"; last; } } print "</BODY>\n"; print "</HTML>\n"; __END__

    • ベストアンサー
    • Perl
  • 動かないです

    おかしなところが有ったらアドバイス・修正等お願いします。 うしろ3行を表示させたいです。 0~2行の場合はその分だけ表示させたいです。 # include <stdio.h> # include <stdlib.h> # include <string.h> char *getline(void) { char *buf = NULL; int size = 0; int oldsize; do { oldsize = size; size = size * 2 + 80; buf = realloc(buf, size + 1); if(!buf) { fprintf(stderr, "memory allocation failed\n"); exit(1); } if(!fgets(buf + oldsize, size + 1 - oldsize, stdin)) if(oldsize) break; else { free(buf); return NULL; } }while(strlen(buf + oldsize) == size - oldsize); return buf; } void scan(char **lines, int n_lines) { char *p; int i; for(i = 0; i < n_lines; i++) lines[i] = NULL; while(p = getline()) { free(lines[0]); for(i = 0; i < n_lines - 1; i++) lines[i] = lines[i+1]; lines[n_lines - 1] = p; } } void print(char **lines, int n_lines) { int i; for(i = 0; i < n_lines; i++) if(lines[i]) fputs(lines[i], stdout); } int main(void) { char *lines[3]; int i; scan(lines, 3); print(lines, 3); for(i = 0; i < 3; i++) free(lines[i]); return 0; }

  • CGIでhtmlページを表示する

    連日質問させていただいています。 CGI超初心者です。 htmlファイルにラジオボタンを設置し、 Aを選んだらhttp://www.a.html、 それ以外を選んだらhttp://www.b.html というサイトを開くようなCGIを作成したいです。 以下のようにやってみたのですがうまくいきません。 どのように修正したらいいでしょうか? #============================================ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } $q1 = $FORM{'radio'}; print "Content-Type: text/html; charset=Shift_JIS\n\n"; print "<html>\n"; print "<head></head>\n"; print "<body>\n"; if ($q1 eq "A") { print "Location: http://www.a.html\n\n"; } else { print "Location: http://www.b.html\n\n"; } print "</body>\n"; print "</html>\n"; exit; #============================================ 上記のようにすると、以下のように、ただ文字が表示されてしまいます。 Location: http://www.a.html #============================================ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } $q1 = $FORM{'radio'}; print "charset=Shift_JIS\n\n";←★ print "<html>\n"; print "<head></head>\n"; print "<body>\n"; if ($q1 eq "A") { print "Location: http://www.a.html\n\n"; } else { print "Location: http://www.b.html\n\n"; } print "</body>\n"; print "</html>\n"; exit; #============================================ ★部分が悪いのかなぁと思い、上記のように修正してみたり、 (Content-Type: text/html; を削除してみました) ★部分を全部削除してみると Internal Server Error となってしまいます。 よろしくお願いいたします!

    • ベストアンサー
    • CGI
  • 検索プログラムの10件表示について

    私はPHPの初心者ですが、ステップアップを兼ねてサイト内検索を作ろうかと思っています。 今回こちらのサイト様(​http://affiliate.aki-f.com/prog/cat/cat9.html​)を参考にさせて頂きました。 ・絞込み検索(and検索) ・1ページを10件表示に制限する 上記のサンプルプログラムを組み合わせてみたのですが 表示結果に問題があり、なんとか修正できないかと思い投稿させて頂きました。 ------------------------表示結果------------------------ 2件見つかりました。全2件 | 次の10件 ・JavaScriptハッカーズ・プログラミング ・コピーするだけですぐに使えるJavaScript ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> ・<空白> -------------------------------------------------------- 2件表示のはずが、10件表示されてしまいます。 さらに、2件しか該当していないに「次の10件」まで表示されてしまいます。 なんとか、検索結果に基づいた表示にしたいのですが どなたか知恵を貸していただければと思います。 宜しくお願い致します。 --------------------------ソース------------------------- if($_GET["key"]==""){ print"キーワードを入力してください"; }else{ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $KeyWord=mb_convert_encoding($KeyWord,"EUC-JP","auto"); $KeyWord=mb_convert_kana($KeyWord,s); $ArrKeyword=explode(" ",$KeyWord); $Result=array(); $Data=file("item.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); $Match=true; for($n=0;$n<sizeof($ArrKeyword);$n++){ if(!eregi($ArrKeyword[$n],$lines)){ $Match=false; break; } } if($Match==true){ array_push($Result,$Data[$i]); } } ?> <?php $n=sizeof($Result); if($n==0){ print"見つかりませんでした"; }else{ print"{$n}件見つかりました"; ?> <?php $P=$_GET["p"]; if($P>0){ $Prev=$P-1; $PrevPage="<a href='allitem.php?p={$Prev}'>前の10件</a>"; } $Size=sizeof($Result); if($Size/10-1>$P){ $Next=$P+1; $NextPage="<a href='allitem.php?p={$Next}'>次の10件</a>"; } ?> 全<?=$Size?>件 | <?=$PrevPage?> <?=$NextPage?> <ul> <?php for($i=$P*10;$i<$P*10+10;$i++){ $line=explode(",",$Result[$i]); $ID=$line[0]; $Title=strip_tags($line[3]); print"<li><a href='item.php?id={$ID}'>{$Title}</a></li>"; } ?> <?php } } ?> </ul> ----------------------------------------------------------

    • ベストアンサー
    • PHP
  • データ削除方法について

    現在以下のプログラムでデータを削除しています。 (ここから) print "Content-type: text/html\n\n"; open(IN,"<$memfile") || &error("Can't write $memfile"); flock(IN, 2); @lines = <IN>; foreach $lines (@lines) { ($seq,$name) = split("<>", $lines); if("$del" eq "$seq"){ next; }else{ $data .= $lines; } } close IN; open OUT, "> $memfile"; flock OUT, 2; print OUT $data; close OUT; print "<html>完了しました<br><a href=?mode=menu>戻る</a></body></html>"; exit; (ここまで) このプログラムでも削除出来るのですが、foreachの処理で対応するとパフォーマンスが悪いのかな? と思ってます。(ハッキリとはわかりません) 件数が多くなるとサーバーエラーになるのかな?と思ってます。 もっと効率の良い方法がありましたらと思い質問いたしました。 perlを独学で学んでいるので、見る人が見ると変なつくりだと思ってます。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • PHPで作る掲示板のプログラムについて

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか? <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP