http://oshiete1.goo.ne.jp/kotaeru.php3?q=964020
にて同じような質問をしたのですが、ご回答と自分での検証で食い違いが起きたので質問させていただきます。
splitを用いた分割と正規表現を用いた分割のどちらが速いかというものです。
#####test.txt###
...
<!--line-->
...
<!--line-->
....
################
というファイルを$lineという変数に入れ、
**********************************************
sub seiki {
my $a,$b,$c;
if($line=~ /(.*)<!--line-->\n(.*)<!--line-->\n(.*)/s){
$a=$1; $b=$2; $c=$3;
}
**********************************************
と
**********************************************
sub split {
my($a,$b,$c){split("<!--line-->\n",$line);}
}
**********************************************
をBenchmarkモジュールを用いて、速度比較をしてみたところ、splitの方が4倍程速い結果が出ました。実際に用いたtest.txtのサイズは10KBです。
前回質問したときのご回答では、正規表現のほうが早いというご意見をいただいたのですが、本当のところはどちらなのでしょうか
No.3ベストアンサー
- 回答日時:
> この場合のsplitはどのような正規表現を使っているのでしょうか?
こればかりはPerlの中身を見てみないと分かりません。
> splitで使われているような正規表現をすれば、正規表現だけで書いた方が速くなるということでしょうか。
splitの実体は、Cなどで書かれたライブラリです。Perlで同じ正規表現、同じアルゴリズムでコードを書いても、速度で上回ることはないでしょう。
前回はあくまで「分割」ではなく「部分取り出し」として捉えることができ、かつ正規表現でも十分な速度が期待できる文字列長だったので、その手の問題ならば正規表現に分があるということを書いたわけです。
詳しくご解説して頂き、ありがとうございました。
>>splitの実体は、Cなどで書かれたライブラリです。Perlで同じ正規表現、同じアルゴリズムでコードを書いても、速度で上回ることはないでしょう。
そうだったのですか、Perlといえども、C等のようなコンパイル済みの処理には勝てないということですね、これですっきり解決できました。またよろしくお願いします。
No.2
- 回答日時:
>
http://oshiete1.goo.ne.jp/kotaeru.php3?q=964020> にて同じような質問をしたのですが、ご回答と自分での検証で食い違いが起きたので質問させていただきます。
今回と前回では、問題の質が違いますよね。
前回の回答を得た後、その問題では検証しなかったのでしょうか?
文字列の中から特定の部分を抜き出すのと、テキストファイルをマーク行を境に分割するのでは、随分勝手が違いますし当然アプローチも変わります。
正規表現は複雑になるほど、また対象文字列が長くなるほど重くなりますし、「分割」といったら split を使うのが普通です。
前回のケースは対象文字列も短かった上、「分割」というより「部分取り出し」に近かったので、正規表現でのアプローチも十分に考えられたし効果的でした。
しかし、今回のケースはファイル全体が対象の上、完全に「分割」です。正規表現を持ち出す余地は鼻からありません。
前の質問は、今回質問した内容を自分で勝手に簡易化して質問してしまっていたので、前回のアドバイスしていただいたソースをそのまま使っては検証していませんでした。なので検証は、今回のテキストファイルから文字列を読み込んで分割して取得する方法でしか試していませんでした。
なるほど、文字列が長くなると処理が重くなってしまうのですね、知りませんでした。。
ただ、ごめんなさい、まだもやもやが取れないので質問させてください。
無謀な質問かもしれませんが、前回のご解説の中に「splitは正規表現を使って分割を行っている」という指摘を受けたのですが、この場合のsplitはどのような正規表現を使っているのでしょうか?splitで使われているような正規表現をすれば、正規表現だけで書いた方が速くなるということでしょうか。すこし頭がこんがらがっています^^;もしよろしければ、これについてアドバイスをお願いしますm(_ _;)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Ruby パイソンエラーについて 1 2022/12/24 14:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現でAND検索はできる...
-
C言語にパターンマッチってない...
-
vbaの正規表現で、マッチした一...
-
grep の検索条件
-
[VBS] テキストファイルから任...
-
grepの正規表現での最短マッチ...
-
正規表現
-
正規表現 秀丸エディタ 行頭か...
-
詳説正規表現はなぜわかりやす...
-
wordの何も書かれていない2ペー...
-
PS4コントローラーをPCでゲーム...
-
EXCELで=より左の文字を一括で...
-
エクセルでアルファベットか数...
-
Chr(13)とChr(10)の違いは?
-
EBCDIC⇒SJIS変換の方法
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【エクセル】セル最後にある無...
-
excelで勝手に改行されます
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【3桁の数字】に【完全一致】す...
-
正規表現 秀丸エディタ 行頭か...
-
[VBS] テキストファイルから任...
-
正規表現でAND検索はできる...
-
メールアドレスの正規表現について
-
C言語のコメントを「正規表現」...
-
vbaの正規表現で、マッチした一...
-
文章中全ての半角カッコ ( の...
-
正規表現でシングルクォーテー...
-
正規表現です。括弧内にある複...
-
(秀丸)正規表現で、特定文字列...
-
C# 数列の読み込み
-
下記の正規表現のお願いですが...
-
正規表現で大文字小文字指定に...
-
正規表現
-
正規表現の仕様について
-
python 正規表現
-
第二水準漢字が含まれるか?
-
スパムメールをブロックするた...
-
grepの正規表現での最短マッチ...
おすすめ情報