0

.sql ファイルを精査し、特定の文字列の内容を置き換えるために作成したこのスクリプトに問題があります。例えば

私は置き換えようとしています:

result of using this information. If you have any comments, queries or concerns with regards to the above information, 

Please <a href="#" target="_blank">Click Here</a>&nbsp;for different contact options.</p>
<h4>Stone properties:</h4>
<p><span>Scientific name of the stone:</span> Quartz/Silicon dioxide</p>
<p><span>Group:</span> Silicates &ndash; tektosilicates</p>

1000 のデータベース行にわたって次のように表示されます。

Please <a href="#" target="_blank">Click Here</a>&nbsp;for different contact options.</p>
<ul class="navlistjdxcms">
<h4>Stone properties:</h4>
<li><span>Scientific name of the stone:</span> Quartz/Silicon dioxide</li>
<li><span>Group:</span> Silicates &ndash; tektosilicates</li>

アイデアは、HTML タグを一致させてから、データベース ファイル内の他のテキスト/行を変更せずに、タグを変更して CSS クラスを追加することです。これまでのところ、私はこれを思いつきました:

full_path_to_read = File.expand_path('C:\Users\huber\Desktop\RubyReg\cms_page.sql')
full_path_to_write = File.expand_path('C:\Users\huber\Desktop\RubyReg\cms_page2.sql')

stringla = ""

File.open(full_path_to_read).each_line { |s|

    contents = s
    xyz = contents.scan(/<p><span>.*?<\/span>.*?<\/p>/o)
    new_str = xyz.to_s.gsub('<p>', '<li>')
    new_str2 = new_str.gsub('</p>', '</li>')
    new_string = '<ul class="navlistjdxcms">' + new_str2 + '</ul>'
    m = s.gsub((/<p><span>.*?<\/span>.*?<\/p>/o), "#{new_string}")
    stringla += m
}

File.open(full_path_to_write, "w+") { |f| f.write(stringla) }

しかし、取得しているようです

<ul class="navlistjdxcms"> 

の試合ごとに表示されます

/<p><span>.*?<\/span>.*?<\/p>/o 

ファイルにあること。

私は多くのRuby正規表現を試し、データベースに直接接続してそこからデータベースを変更しようとしましたが、それを理解できないようです.

私も使用しようとしました:

m = s.gsub("#{xyz}", "#{new_string}")

およびこれの他の多くのバリエーションは、あまり成功していません。一致した単一の行だけでなく、一致した段落全体を new_string に置き換えるにはどうすればよいですか? また、Ruby の文字列とクラスに関して何か別のことをしているような気がします。

これがRuby Regex 101であることは知っていますが、理解できないようです。よろしくお願いします。

4

1 に答える 1