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

Replace() private method

Replaces all occurrences of the regex in the string with the replacement pattern. 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.
private Replace ( Regex regex, string input, int count, int startat ) : string
regex Regex
input string
count int
startat int
return string
        internal string Replace(Regex regex, string input, int count, int startat)
        {
            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;
                        ReplacementImpl(sb, 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;
                        ReplacementImplRTL(al, 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 ( MatchEvaluator evaluator, 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