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

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -