私はRubyistなので、私の例はRubyになります。物事をまっすぐにするために、2つの正規表現を使用することをお勧めします。
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に置き換えます。
あなたはそれを組み合わせることができるかもしれませんが、それは良い考えではないようです。元のタグを(削除して)基本的に変更し、それ自体の内部にあるものに置き換えます。これらの2つのステップを可能な限り分離すると、問題が発生する可能性が低くなります。
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を使用していなくても、この例が理にかなっていることを願っています。与えられた入力ファイルでこれをテストしたところ、期待どおりの出力が得られました。