c# - Regex back references in Regex.Replace() -
i'm using regex replace values within html code. correctly matches instances within html code when using regex.replace() references doesn't replace references.
for example
html = "<td>[element]elementreference='oldvalue';[/element]</td>"; html = regex.replace(html, @"(['""#(=])" + elementreference.key + @"(['""#)];|&)", "$1" + elementreference.value + "$2", regexoptions.ignorecase); results in:
"<td>[element]elementreference=$1newvalue'[/element]</td>" but if use
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]); } the result
"<td>[element]elementreference='newvalue'[/element]</td>" which expected.
can explain why using regex.replace() did not work?
edit
i not attempting replace inner html, attempting replace 'oldvalue' part of [element]elementreference='oldvalue'[/element], happens in html tag. problem lies fact trying replace apostrophe around text, using reference. apostrophe number of values, why using reference.
if try codes, neither replacement, because there no semicolon after value trying replace.
if remove semicolon regular expression, both works:
html = regex.replace(html, @"(['""#(=])" + "oldvalue" + @"(['""#)]|&)", "$1" + "asdf" + "$2", regexoptions.ignorecase); does same as:
var regex = new regex(@"(['""#(=])" + "oldvalue" + @"(['""#)]|&)", regexoptions.ignorecase); foreach (match match in regex.matches(html)) { html = html.replace(match.value, match.groups[1] + "asdf" + match.groups[2]); } edit:
when try updated code question, works fine:
string html; keyvaluepair<string, string> elementreference = new keyvaluepair<string, string>("oldvalue", "newvalue"); html = "<td>[element]elementreference='oldvalue';[/element]</td>"; html = regex.replace(html, @"(['""#(=])" + elementreference.key + @"(['""#)];|&)", "$1" + elementreference.value + "$2", regexoptions.ignorecase); console.writeline(html); 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]); } console.writeline(html); output:
<td>[element]elementreference='newvalue';[/element]</td> <td>[element]elementreference='newvalue';[/element]</td>
Comments
Post a Comment