using System;
using System.Text.RegularExpressions;
using System.Linq;
public class Test
{
public static void Main()
{
var s = "The $quick$ brown '$$fox$$' jumps $$over$$ the '$lazy$' dog";
var p = @"(?x)
(?<quote>'[^'\\]*(?:\\.[^\\']*)*') # A single quoted string literal pattern
| # or
(?<!\$) # no $ immediately to the left
(\${1,2}) # 1 or 2 $ symbols (Group 1)
[^$]+ # 1 or more non-$ chars
\1 # Same value as in Group 1 (backreference)
(?!\$) # No $ immediately to the left of the current location
";
var result = Regex.Replace(s, p, m =>
m.Groups["quote"].Success ? m.Groups["quote"].Value : "substituted");
Console.WriteLine(result);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CnVzaW5nIFN5c3RlbS5MaW5xOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBzID0gIlRoZSAkcXVpY2skIGJyb3duICckJGZveCQkJyBqdW1wcyAkJG92ZXIkJCB0aGUgJyRsYXp5JCcgZG9nIjsKCQl2YXIgcCA9IEAiKD94KQoJCSAgICAgICAgICAgICAoPzxxdW90ZT4nW14nXFxdKig/OlxcLlteXFwnXSopKicpICMgQSBzaW5nbGUgcXVvdGVkIHN0cmluZyBsaXRlcmFsIHBhdHRlcm4KCQkgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yCgkJICAgICAgICAgICAgICg/PCFcJCkgICAgICAgICAgICAgICAjIG5vICQgaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQKCQkgICAgICAgICAgICAgICAgKFwkezEsMn0pICAgICAgICAgICMgMSBvciAyICQgc3ltYm9scyAoR3JvdXAgMSkKCQkgICAgICAgICAgICAgICAgIFteJF0rICAgICAgICAgICAgICMgMSBvciBtb3JlIG5vbi0kIGNoYXJzCgkJICAgICAgICAgICAgICAgIFwxICAgICAgICAgICAgICAgICAjIFNhbWUgdmFsdWUgYXMgaW4gR3JvdXAgMSAoYmFja3JlZmVyZW5jZSkKCQkgICAgICAgICAgICAgKD8hXCQpICAgICAgICAgICAgICAgICMgTm8gJCBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBvZiB0aGUgY3VycmVudCBsb2NhdGlvbgoJCSAgICAgICAgICAgICAiOyAgICAgICAgICAgIAoJCXZhciByZXN1bHQgPSBSZWdleC5SZXBsYWNlKHMsIHAsIG0gPT4KCQkJbS5Hcm91cHNbInF1b3RlIl0uU3VjY2VzcyA/IG0uR3JvdXBzWyJxdW90ZSJdLlZhbHVlIDogInN1YnN0aXR1dGVkIik7CgkJQ29uc29sZS5Xcml0ZUxpbmUocmVzdWx0KTsKCX0KfQ==