アプレットを置き換えるHTMLスクリプトを記述するRubyの例
次のような内容のファイルがたくさんある場合。
<p style="display:none">Choose D for this question.
....
....
....
</p>
そして、実現したいのは、それを置き換えることです。
<div style="display:none" class="sl_explain"> Choose D for this question.
.....
.....
.....
</div>
これは少し簡単そうに見えますが、この機能を実装するのに半日かかりました。主に、私は長い間Rubyのプログラムを書いていないのでAPIに慣れていないこと、次に、正規表現、特にRubyの正規表現に慣れていないこと、最後に、いくつかの細部の検討が十分でないことが理由です。
上記の機能を実装するには、2つのステップに分けることができる。最初のステップは
<p style="display:none">Choose D for this question.
....
....
....
</p>
を置き換えてください。
<p style="display:none"> Choose D for this question. ............ </p>
この形式は、なぜそれを置き換えるのか、ファイルを読む際に、一行ずつ読む必要があるため、そこにある "単語 "が、その行を読むことができず、正規表現のマッチングでは、当然、すべてにマッチしません。これを達成するために、我々は唯一の置換を置き換える必要があります。
<p style="display:none"> Choose D for this question. ............ </p>
また、内部的にはいくつかの制約がありますが、以下のようなコードで実装されています。
File.open("logic-fill2.htm","w") do |test|.
File.open("logic_fill.htm",'r:gbk') do |file|
file.each_line do |line|
if(line.start_with?('<p style="display:none">') && !line.end_with?("</p>\n"))
line.gsub!(Regexp.new('\n'), '')
end
test.print line
end
end
end
置換した内容を新しいファイル "logic_fill2 に置きます。 html"(注1、上記のファイルへの出力は、putsではなくprintを使用すると、そうでなければ当然 \n が追加され、その後何もせずに置換されます;注2、上記の end_with も、行末を読むと見えない改行があるため \n が追加されます;注3、時々 <p style="display: \n この行の最後を読むと、見えない改行があるからです \n; 注3、時々 <p style="display:none"> 前にスペースが入るので、start_withをincludeに変更すればいいのですね? に変更し、このファイルを読み込んで、正規表現で置換し、置換した内容を"test.html"に戻すというものです。
File.open("test.html","w") do |test|
File.open("logic_fill2.htm",'r') do |file|
file.each_line do |line|
line.gsub!(Regexp.new('<p style="display:none">(. *)</p>'), '<div style="display:none" class="sl_explain">\1</div>')
test.puts line
end
end
end
このようにして、私の実現したい機能が実現される。また、ファイルを一行ずつ読み込まない場合は、以下のように複数行のマッチングで行うことも可能です。
Regexp.new('<p style="display:none">(. *)</p>',Regexp::MULTILINE)
残念ながら、行単位で読み取る方法しか思いつかなかったので、複数行のマッチングパターンは使えません。
関連
-
最新のCocoaPodsインストールチュートリアル
-
RVMを使ってRuby/Railsのバージョン切り替えを制御する
-
挿入ソートアルゴリズムのRuby実装と高度な双方向挿入ソートコード例
-
Rubyを使ったラムダ計算の詳しいシミュレーション方法
-
Ruby on Railsで構築するアプリケーションの基本的なディレクトリ構造のまとめ
-
Nokogiriパッケージを使ってXML形式のデータを操作するためのRubyチュートリアル
-
文字列のマッチングと置換のためのRuby正規表現
-
Rubyにおけるコメントの使い方と中国語のエンコーディングについて解説します。
-
Rubyのモジュールに関する基礎知識
-
Rubyプログラミングにおけるネーミングスタイルガイド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rubyの乱数生成方法のまとめ
-
ruby on railsのモデルアソシエーションについて解説
-
Ruby正規表現とサンプルコード
-
UbuntuでRuby on RailsフレームワークとRubyMine IDEを設定する
-
Rubyのオブジェクト指向プログラミングにおけるスコープの簡単な説明
-
Rubyのデバッグツールruby-debug-base19のインストールと設定(Windows版
-
Ruby on Railsのビューの書き方に関するいくつかのアドバイス
-
Rubyにおける正規表現の使用に関する分析
-
Rubyの変数参照に関するいくつかの注意点
-
Ruby on Railsのマイグレーションに関するいくつかの考慮点