namespace System.Text.RegularExpressions {
class ReplacementEvaluator {
- public static string Evaluate (string replacement, Match match) {
+ public static string Evaluate (string replacement, Match match)
+ {
ReplacementEvaluator ev = new ReplacementEvaluator (match.Regex, replacement);
return ev.Evaluate (match);
}
- public ReplacementEvaluator (Regex regex, string replacement) {
+ public ReplacementEvaluator (Regex regex, string replacement)
+ {
this.regex = regex;
this.replacement = replacement;
this.pieces = null;
public string Evaluate (Match match)
{
+ if (n_pieces == 0)
+ return replacement;
StringBuilder sb = new StringBuilder ();
EvaluateAppend (match, sb);
return sb.ToString ();
public void EvaluateAppend (Match match, StringBuilder sb)
{
- int i = 0, k, count;
-
if (n_pieces == 0) {
sb.Append (replacement);
return;
}
+ int i = 0;
while (i < n_pieces) {
- k = pieces [i++];
+ int k = pieces [i++];
if (k >= 0) {
- count = pieces [i++];
+ int count = pieces [i++];
sb.Append (replacement, k, count);
} else if (k < -3) {
Group group = match.Groups [-(k + 4)];
}
}
+ public bool NeedsGroupsOrCaptures {
+ get {
+ if (n_pieces == 0)
+ return false;
+ else
+ return true;
+ }
+ }
+
void Ensure (int size)
{
int new_size;
}
// private
- private void Compile () {
- replacement = Parser.Unescape (replacement);
-
+ private void Compile ()
+ {
int anchor = 0, ptr = 0, saveptr;
char c;
while (ptr < replacement.Length) {
AddFromReplacement (anchor, ptr);
}
- private int CompileTerm (ref int ptr) {
+ private int CompileTerm (ref int ptr)
+ {
char c = replacement [ptr];
if (Char.IsDigit (c)) { // numbered group