- ベストアンサー
indexと正規表現、どちらが早い?ファイルから特定の文字を検索する方法
- 30ファイルあるテキストファイルから特定の文字にマッチする行を調べたい。確認したい文字列の長さは10-20文字。perlを使って検索する場合、index関数と正規表現のどちらが効率的なのか疑問。
- ファイルはアルファベットで構成され、各行の末尾は改行で区切られている。スペースは含まれていない。3-5GB程度の大きさ。
- 他に良い方法やモジュールがあれば教えてほしい。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- Perl 正規表現に関して
現在Perlにて正規表現を用い,アクセス者のログが納めてあるlog.datからデータを検索し集計するといったアルゴリズムです. ところが正規表現を用いたのは良いものの,アルファベット以外をパターンとして使用したとき,データを呼び出すどころか表示されない状況に陥ってしまいました. elsif($referer =~ /abcd/i) { $word2 = "abcd"; } 上記のコードは,パターンがアルファベットで構成されているため,正常にシステムが動作します. elsif($referer =~ /あいうえ/i) { $word2 = "あいうえ"; } しかし,上記のコードはパターンが平仮名で構成されているため,冒頭で記している問題が発生してしまいます. そこで (1)パターンにアルファベット以外のものは使えるのか. (2)パターンにアルファベット以外のものを使いたいときはどうすればいいのか. についてお教えください. また正規表現のほかに,文字列を検索し,頻度をカウントすることに長けているコードがございましたらお教え願います. 以上の内容で不明な点等ございましたら随時対応致します. 宜しくお願いします.
- ベストアンサー
- Perl
- 正規表現について
正規表現につての質問です。 今テキストファイルに下記のような漢字と数字が並んでいます。 そこから、漢字一文字だけの行を抜き出してきたいのですが、うまくいきません。PerlとCygwinを使用しています。よろしくお願いします。 人584504122 情報542701982 商品510342870 日414551872 方347990908 者347069359 中339925319 表示330177395 的324961911 私323727263 検索291502623 見ル285226619 場合275698771 一256241900 利用253752129 年240881734 時239273060 前228762989 店225241510 登録224560617 ・ ・ ・ プログラム中身 #! /usr/bin/perl -w #テキストから指定した単語などとマッチすると、 #その単語を含んだ文を抜き出してくる。 while(<>){ s/ +//g; s/\s+//g; if(/^([亜-煕]|[一-龠]){1}[0-9]*/){ print; print "\n"; } }
- 締切済み
- その他(学問・教育)
- 正規表現の添削をお願いします
アルファベットと数字とスペースと「-」のみで構成される任意の長さの文字列をjavaの正規表現であらわしたいです。 [\s0-9a-zA-Z-]+ でいいのでしょうか? 最後の「-」がまずいような気がするのですが、[-]はどこに持っていくのが正しいのでしょうか。 他にも間違っているところがありましたら、教えて下さい。
- ベストアンサー
- その他([技術者向] コンピューター)
- 正規表現について
お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。
- ベストアンサー
- PHP
- 正規表現を教えてください。
正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。
- ベストアンサー
- Microsoft ASP
- 正規表現での検索がうまくいきません…
質問させて下さい。 WindowsにてAtivePerlの5.8.6.811を使っています。 サーバはAnHttpdです。 htmlの文章ファイルを読み込んで、空白行で区切ってリストに読み込み、そのリストを配列ごとに正規表現で検索して、マッチしたものだけをhtmlで表示しようとしています。 ところが、検索結果にどうにも変な時があります。 少し試したところ、「ゲーム」「ラッキー」などの「ー」が入る文字を検索しようとすると、全く処理をしてくれないのです。 その上、そのパターンマッチ検索のスクリプトより下に書いた行が全て実行されなくなってしまいます。 Shift-JISで書いているので、ダメ文字の類なのかとも思い、シングルクォートで囲ったり、「ー」の後に\をいれてみたりもしましたが、変化ありません(十や表はこれでうまくいきました…)。 また、それ以外にも、「スイス」などという、絶対に書かれていない単語で検索しても、検索されてしまう配列があったりします。 これに至っては完全に謎です…。 分かる方がいらしたら、どうかよろしくお願いします。
- ベストアンサー
- CGI
- 正規表現/スペース以降改行までのグローバルマッチ
JavaScript正規表現で、「スペース1つ」以降「改行」までのグローバルマッチを行いたいのですが、うまくいきません。 ■マッチさせたい内容 ・年末なのに ここをマッチさせたい ・正規表現が ここもマッチさせたい ・ ここもマッチさせたい ・ここはマッチさせたくない ・ここはマッチさせたくない ■うまくいかない正規表現 /\s{1}.*[\n\r]/g
- 締切済み
- JavaScript
- 正規表現で分かりません
例えば以下のようなパターンの正規表現チェックがあるのですが、 どのようなものを意味しているか分かりません。 教えていただけますでしょうか。 よろしくお願いします。 以下の情報は調べたのですが。 +(プラス)・・・直前の1文字の1回以上の繰り返しを表現 . (ピリオド)・・・改行コード以外の1文字にマッチするか否か [ ](大括弧)・・・囲みの中に書かれた任意の1文字にマッチするか否か ^([^ ]+) +[^ ]+.+S3.lzh
- ベストアンサー
- Microsoft ASP
- java正規表現について
bufferdreaderで読み込んだファイルを1行ずつ読み込みます。そして、arraylistに追加していきます。そして、各行に”JP”という文字列があれば、表示しないプログラムを作りたいです。 (".*JP.*")だとうまくいきません… ちなみに、文頭、文末、文中どこでも検索できるようにしたいです。 よろしくお願いします。
- ベストアンサー
- Java
お礼
回答ありがとうございます。 疑問が解決しました。 indexの方が早いとは予測していたのですが、思っていたほど違いはないんですね。これだったら、より柔軟に文字列を設定できる正規表現を使おうかと思います。 ありがとうございました。