一部のHTMLコード内の値を置き換えるために正規表現を使用しています。html コード内のすべてのインスタンスに正しく一致しますが、後方参照で Regex.Replace() を使用すると、後方参照は置き換えられません。
例えば
html = "<td>[element]elementreference='oldvalue';[/element]</td>";
html = Regex.Replace(html, @"(['""#(=])" + elementReference.Key + @"(['""#)];|&)", "$1" + elementReference.Value + "$2", RegexOptions.IgnoreCase);
結果:
"<td>[element]elementreference=$1newvalue'[/element]</td>"
しかし、私が使用する場合
html = "<td>[element]elementreference='oldvalue';[/element]</td>";
var regex = new Regex(@"(['""#(=])" + elementReference.Key + @"(['""#)];|&)", RegexOptions.IgnoreCase);
foreach (Match match in regex.Matches(html))
{
html = html.Replace(match.Value, match.Groups[1] + elementReference.Value + match.Groups[2]);
}
結果は
"<td>[element]elementreference='newvalue'[/element]</td>"
これは私が期待したものです。
Regex.Replace() の使用が機能しなかった理由を説明できる人はいますか?
編集
内部の html を置き換えようとしているのではなく、たまたま html タグにあるの'oldvalue'
一部を置き換えようとしています。[element]elementreference='oldvalue'[/element]
私の問題は、後方参照を使用して、テキストの周りのアポストロフィを置き換えようとしているという事実にあります。このアポストロフィーは複数の値である可能性があるため、後方参照を使用しています。