我写的这个脚本有问题,我写的这个脚本通过一个 .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> 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 – tektosilicates</p>
看起来像跨越 1000 个数据库行:
Please <a href="#" target="_blank">Click Here</a> 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 – 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,只是似乎无法弄清楚。提前谢谢了。