System.Text.RegularExpressions.RegexReplacement.Replace C# (CSharp) Method

Replace() static private method

Replaces all occurrences of the regex in the string with the replacement evaluator. Note that the special case of no matches is handled on its own: with no matches, the input string is returned unchanged. The right-to-left case is split out because StringBuilder doesn't handle right-to-left string building directly very well.
static private Replace ( MatchEvaluator evaluator, Regex regex, string input, int count, int startat ) : string
evaluator MatchEvaluator
regex Regex
input string
count int
startat int
return string
        internal static string Replace(MatchEvaluator evaluator, Regex regex,
                                       string input, int count, int startat)
        {
            if (evaluator == null)
                throw new ArgumentNullException(nameof(evaluator));
            if (count < -1)
                throw new ArgumentOutOfRangeException(nameof(count), SR.CountTooSmall);
            if (startat < 0 || startat > input.Length)
                throw new ArgumentOutOfRangeException(nameof(startat), SR.BeginIndexNotNegative);

            if (count == 0)
                return input;

            Match match = regex.Match(input, startat);

            if (!match.Success)
            {
                return input;
            }
            else
            {
                StringBuilder sb = StringBuilderCache.Acquire();

                if (!regex.RightToLeft)
                {
                    int prevat = 0;

                    do
                    {
                        if (match.Index != prevat)
                            sb.Append(input, prevat, match.Index - prevat);

                        prevat = match.Index + match.Length;

                        sb.Append(evaluator(match));

                        if (--count == 0)
                            break;

                        match = match.NextMatch();
                    } while (match.Success);

                    if (prevat < input.Length)
                        sb.Append(input, prevat, input.Length - prevat);
                }
                else
                {
                    List<string> al = new List<string>();
                    int prevat = input.Length;

                    do
                    {
                        if (match.Index + match.Length != prevat)
                            al.Add(input.Substring(match.Index + match.Length, prevat - match.Index - match.Length));

                        prevat = match.Index;

                        al.Add(evaluator(match));

                        if (--count == 0)
                            break;

                        match = match.NextMatch();
                    } while (match.Success);

                    if (prevat > 0)
                        sb.Append(input, 0, prevat);

                    for (int i = al.Count - 1; i >= 0; i--)
                    {
                        sb.Append(al[i]);
                    }
                }

                return StringBuilderCache.GetStringAndRelease(sb);
            }
        }

Same methods

RegexReplacement::Replace ( Regex regex, string input, int count, int startat ) : string

Usage Example

示例#1
0
文件: Regex.cs 项目: jnm2/corefx
        /// <summary>
        /// Replaces all occurrences of the previously defined pattern with the recent
        /// replacement pattern, starting at the character position
        /// <paramref name="startat"/>.
        /// </summary>
        public string Replace(string input, MatchEvaluator evaluator, int count, int startat)
        {
            if (input == null)
                throw new ArgumentNullException(nameof(input));

            return RegexReplacement.Replace(evaluator, this, input, count, startat);
        }
All Usage Examples Of System.Text.RegularExpressions.RegexReplacement::Replace