-PR-
wcs_abe

Perlで以下の通り、
htmlファイルを全て読み込んだ後に正規表現を当てたいのですが、うまくいきません。
恐縮ですが、原因をご存知の方いらっしゃいましたら教えて頂けませんでしょうか。
また、他に良い解決方法がありましたら教えて頂けると幸いです。
※PC環境はwindows7, perl5.12です。情報に不足がございましたらご指摘下さい。

-----
#--test.html(左側の数字は行数)
000001 <dl>
000002 <dt>aaa</dt>
000003 <dd>12345</dd>
000004 </dl>

(中略)

120001 <dl>
120002 <dt>bbb</dt>
120003 <dd>6789</dd>
120004 </dl>

#--test.pl
open IN , "test.html";
local $/ = undef;
$data = <IN>;
close IN;

$data =~ s|<td>bbb</td>|<td>ccc</td>|;
print "$data\n";
-----

ファイルの始めの方だと当たるのに、後半では当たりません。
正規表現の対象として大きすぎるんでしょうか・・・。

$data =~ s|<td>aaa</td>|<td>ccc</td>|;
は、当たりますが

$data =~ s|<td>bbb</td>|<td>ccc</td>|;
だと当たりません。

どうぞよろしくお願いいたします。
  • 回答数4
  • 気になる数0
  • Aみんなの回答(全4件)

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

    • 2011-04-17 18:10:25
    • 回答No.4
    参考までに、ideoneでの実行;

    http://www.ideone.com/lziei

    質問文の例は普通に動いてるので、SJIS変換してるあたりに原因があるかも。ないかも。
    お礼コメント
    お礼遅くなり申し訳ございません。
    ご確認頂きありがとうございました。
    (ideone.com 知りませんでした、こんなサイトがあるんですね)

    ちょっと時間がとれなくて細かい検証はできていないんですが、
    仰る通りどうやらSjis.pmが悪さしていたようです。
    投稿日時 - 2011-04-18 20:26:47
    • ありがとう数0
    -PR-
    -PR-

    その他の回答 (全3件)

    • 2011-04-17 12:40:01
    • 回答No.1
    td? dt?
    補足コメント
    大変失礼しました。
    正規表現中の "td" は "dt" の間違いです。
    ご指摘頂きありがとうございました。
    投稿日時 - 2011-04-17 12:50:33
    • ありがとう数0
    • 2011-04-17 13:56:15
    • 回答No.2
    open IN , "test.html"; my $data; { local $/ = undef; $data = <IN>; } close IN; でスコープに入れてはどうでしょう。$/ undefしたままで他の処理を行おうとすると予期せぬ結果になるかもしれません。 ...続きを読む
    open IN , "test.html";
    my $data;
    {
    local $/ = undef;
    $data = <IN>;
    }
    close IN;

    でスコープに入れてはどうでしょう。$/ undefしたままで他の処理を行おうとすると予期せぬ結果になるかもしれません。
    お礼コメント
    ご回答頂きありがとうございます。

    スコープ試してみて結果は変わらなかったんですが、
    そもそもスコープに入れる発想が無かったので勉強になりました。
    ありがとうございました。
    投稿日時 - 2011-04-17 16:53:50
    • ありがとう数0
    • 2011-04-17 14:40:03
    • 回答No.3
    確認ですが, この例で 1行ずつ処理したときには想定した通りの結果になっている のですね? ...続きを読む
    確認ですが, この例で
    1行ずつ処理したときには想定した通りの結果になっている
    のですね?
    補足コメント
    ご質問頂きありがとうございます。
    はい while(<>) で処理した場合は想定通りの結果になります。

    ただ一点補足がございます。
    上記の質問では、関連は薄いと思いあえて記載しなかったんですが、
    このhtmlファイルはSjisテキストで、それをSjis.pmを使って処理を行おうとしています。

    通常のエンコードした場合で試していなかったので
    ちょっと後で試してみようと思います。
    投稿日時 - 2011-04-17 17:01:07
    • ありがとう数0
    • 回答数4
    • 気になる数0
    • ありがとう数0
    • ありがとう
    • なるほど、役に立ったなど
      感じた思いを「ありがとう」で
      伝えてください
    • 質問する
    • 知りたいこと、悩んでいることを
      投稿してみましょう
    こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
    このQ&Aにはまだコメントがありません。
    あなたの思ったこと、知っていることをここにコメントしてみましょう。

    関連するQ&A

    -PR-
    -PR-

    その他の関連するQ&Aをキーワードで探す

    別のキーワードで再検索する
    -PR-
    -PR-
    -PR-

    特集


    成功のポイントとは?M&Aで経営の不安を解決!

    -PR-

    ピックアップ

    -PR-
    ページ先頭へ