我是一名 Rubyist,所以我的示例将使用 Ruby。我建议使用两个正则表达式,只是为了保持直截了当:
url_reg = /<a href="(.*?)"/ # Matches first string within <a href=""> tag
tag_reg = /(<a href=.*?a>)/ # Matches entire <a href>...</a> tag
您需要将带有第一个正则表达式的 URL 拉出并临时存储,然后将标记的全部内容(与 tag_reg 匹配)替换为存储的 URL。
您也许可以将其结合起来,但这似乎不是一个好主意。您从根本上改变(通过删除)原始标签,并用其内部的东西替换它。如果您尽可能地将这两个步骤分开,那么出错的可能性就会降低。
Ruby 中的示例
def replace_tag(input)
url_reg = /<a href="(.*?)"/ # Match URLS within an <a href> tag
tag_reg = /(<a href=.*?a>)/ # Match an entire <a href></a> tag
while (input =~ tag_reg) # While the input has matching <a href> tags
url = input.scan(url_reg).flatten[0] # Retrieve the first URL match
input = input.sub(tag_reg, url) # Replace first tag contents with URL
end
return input
end
File.open("test.html", "r") do |html_input| # Open original HTML file
File.open("output.html", "w") do |html_output| # Open an output file
while line = html_input.gets # Read each line
output = replace_tag(line) # Perform necessary substitutions
html_output.puts(output) # Write output lines to file
end
end
end
即使你不使用 Ruby,我希望这个例子是有意义的。我在您给定的输入文件上对此进行了测试,它产生了预期的输出。