これは私の別の質問へのフォローアップです。私が見つけた解決策は、私が最初に回避したケースが現れるまで、私が投げたすべてのテストケースでうまく機能しました。
私の目標は、正規表現を使用して不適切にフォーマットされたタグ属性を再フォーマットすることです(私が知っているように、おそらく絶対確実な方法ではありませんが、我慢してください)。
私の機能:
Public Function ConvertMarkupAttributeQuoteType(ByVal html As String) As String
Dim findTags As String = "</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>"
Return Regex.Replace(html, findTags, AddressOf EvaluateTag)
End Function
Private Function EvaluateTag(ByVal match As Match) As String
Dim attributes As String = "\s*=\s*(?:(['""])(?<g1>(?:(?!\1).)*)\1|(?<g1>\S+))"
Return Regex.Replace(match.Value, attributes, "='$2'")
End Function
関数の正規表現は、EvaluateTag
HTMLを次のように正しく変換します
<table border=2 cellpadding='2' cellspacing="1">
の中へ
<table border='2' cellpadding='2' cellspacing='1'>
属性値を一重引用符で囲むように強制していることに気付くでしょう。心配しないでください。それが壊れたのは、最後の属性値の周りに何もない場合です。
<table width=100 border=0>
正規表現の置き換えから出てきます
<table width='100' border='0>'
タグの外側に誤って最後の一重引用符があります。私は以前、正規表現がまったく得意ではないことを告白しました。私はそれができることすべてを理解するのに時間をかけていません。EvaluateTag
したがって、この最後のケースを処理できるように正規表現を調整するための支援を求めています。
ありがとうございました!