anchor.diff:              | "$0" -> "$0"
               | "$00" -> "$00"
               | "$&" -> matched
  -            | "$`" -> before
  -            | "$'" -> after
  +            | "$`" -> before()
  +            | "$'" -> after()
               | _ ->
                 let subPatternIndex = t.Substring 1 |> int
                 if groups <> null && subPatternIndex < groups.Count
  
positive.code:     let private replaceTokens =
        new Regex(@"[^$]+|\$\$|\$&|\$`|\$'|\$\d\d|\$\d|\$", RegexOptions.Compiled)
  
      let private evaluateReplacement (matched:string) (before:string) (after:string) (replacement:string) (groups:GroupCollection) =
        if replacement.Contains("$") then
  
          let tokens : seq<Capture> = replaceTokens.Matches replacement |> Seq.cast
  
negative.code:             let before = value.Substring(0, index)
              let after = value.Substring(index + search.Length)
              let replace = replace |> TC.ToString
              let replace = evaluateReplacement search (fun () -> before) (fun () -> after) replace null
              before + replace + after
  
          else
  