Пример #1
0
 internal RefMatchEnumerator(InternalRegex regex, ReadOnlySpan <char> subject, PcreMatchSettings settings)
 {
     _regex    = regex;
     _subject  = subject;
     _settings = settings;
     _match    = default;
 }
Пример #2
0
        private IEnumerable <PcreMatch> MatchesIterator(string subject, PcreMatchSettings settings)
        {
            using (var context = settings.CreateMatchContext(subject))
            {
                var result = ExecuteMatch(context);

                if (result.ResultCode != MatchResultCode.Success)
                {
                    yield break;
                }

                var match = new PcreMatch(result);
                yield return(match);

                var options = context.AdditionalOptions;

                while (true)
                {
                    context.StartIndex        = match.GetStartOfNextMatchIndex();
                    context.AdditionalOptions = options | (match.Length == 0 ? PatternOptions.NotEmptyAtStart : PatternOptions.None);

                    result = ExecuteMatch(context);

                    if (result.ResultCode != MatchResultCode.Success)
                    {
                        yield break;
                    }

                    match = new PcreMatch(result);
                    yield return(match);
                }
            }
        }
Пример #3
0
        private IEnumerable <PcreMatch> MatchesIterator(string subject, PcreMatchSettings settings)
        {
            var match = InternalRegex.Match(subject, settings, settings.StartIndex, settings.AdditionalOptions.ToPatternOptions());

            if (!match.Success)
            {
                yield break;
            }

            yield return(match);

            var baseOptions = settings.AdditionalOptions.ToPatternOptions() | PcreConstants.NO_UTF_CHECK;

            while (true)
            {
                var startIndex = match.GetStartOfNextMatchIndex();
                var options    = baseOptions | (match.Length == 0 ? PcreConstants.NOTEMPTY_ATSTART : 0);

                match = InternalRegex.Match(subject, settings, startIndex, options);
                if (!match.Success)
                {
                    yield break;
                }

                yield return(match);
            }
        }
Пример #4
0
        public RefMatchEnumerable Matches(ReadOnlySpan <char> subject, int startIndex, PcreRefCalloutFunc onCallout)
        {
            if (subject == null)
            {
                throw new ArgumentNullException(nameof(subject));
            }

            return(Matches(subject, PcreMatchSettings.GetSettings(startIndex, PcreMatchOptions.None, onCallout)));
        }
Пример #5
0
        public IEnumerable <PcreMatch> Matches(string subject, int startIndex, Func <PcreCallout, PcreCalloutResult> onCallout)
        {
            if (subject == null)
            {
                throw new ArgumentNullException(nameof(subject));
            }

            return(Matches(subject, PcreMatchSettings.GetSettings(startIndex, PcreMatchOptions.None, onCallout)));
        }
Пример #6
0
        public RefMatchEnumerable Matches(ReadOnlySpan <char> subject, PcreMatchSettings settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (settings.StartIndex < 0 || settings.StartIndex > subject.Length)
            {
                throw new IndexOutOfRangeException("Invalid StartIndex value");
            }

            return(new RefMatchEnumerable(InternalRegex, subject, settings));
        }
Пример #7
0
        public PcreMatch Match(string subject, int startIndex, PcreMatchOptions options, Func <PcreCallout, PcreCalloutResult> onCallout)
        {
            var settings = new PcreMatchSettings
            {
                StartIndex        = startIndex,
                AdditionalOptions = options
            };

            if (onCallout != null)
            {
                settings.OnCallout += onCallout;
            }

            return(Match(subject, settings));
        }
Пример #8
0
        public PcreRefMatch Match(ReadOnlySpan <char> subject, PcreMatchSettings settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (settings.StartIndex < 0 || settings.StartIndex > subject.Length)
            {
                throw new IndexOutOfRangeException("Invalid StartIndex value");
            }

            var match = InternalRegex.CreateRefMatch();

            match.FirstMatch(subject, settings, settings.StartIndex);

            return(match);
        }
Пример #9
0
        public IEnumerable <PcreMatch> Matches(string subject, PcreMatchSettings settings)
        {
            if (subject == null)
            {
                throw new ArgumentNullException("subject");
            }

            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (settings.StartIndex < 0 || settings.StartIndex > subject.Length)
            {
                throw new IndexOutOfRangeException("Invalid StartIndex value");
            }

            return(MatchesIterator(subject, settings));
        }
Пример #10
0
        public IEnumerable <PcreMatch> Matches(string subject, int startIndex, Func <PcreCallout, PcreCalloutResult> onCallout)
        {
            if (subject == null)
            {
                throw new ArgumentNullException("subject");
            }

            var settings = new PcreMatchSettings
            {
                StartIndex = startIndex
            };

            if (onCallout != null)
            {
                settings.OnCallout += onCallout;
            }

            return(Matches(subject, settings));
        }
Пример #11
0
        public PcreMatch Match(string subject, PcreMatchSettings settings)
        {
            if (subject == null)
            {
                throw new ArgumentNullException(nameof(subject));
            }

            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (settings.StartIndex < 0 || settings.StartIndex > subject.Length)
            {
                throw new IndexOutOfRangeException("Invalid StartIndex value");
            }

            return(InternalRegex.Match(subject, settings, settings.StartIndex, settings.AdditionalOptions.ToPatternOptions()));
        }
Пример #12
0
        public PcreMatch Match(string subject, PcreMatchSettings settings)
        {
            if (subject == null)
            {
                throw new ArgumentNullException("subject");
            }

            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (settings.StartIndex < 0 || settings.StartIndex > subject.Length)
            {
                throw new IndexOutOfRangeException("Invalid StartIndex value");
            }

            using (var context = settings.CreateMatchContext(subject))
            {
                return(new PcreMatch(ExecuteMatch(context)));
            }
        }
Пример #13
0
 public PcreRefMatch Match(ReadOnlySpan <char> subject, int startIndex, PcreMatchOptions options, PcreRefCalloutFunc onCallout)
 => Match(subject, PcreMatchSettings.GetSettings(startIndex, options, onCallout));
Пример #14
0
 public PcreMatch Match(string subject, int startIndex, PcreMatchOptions options, Func <PcreCallout, PcreCalloutResult> onCallout)
 => Match(subject, PcreMatchSettings.GetSettings(startIndex, options, onCallout));
Пример #15
0
 internal RefMatchEnumerable(InternalRegex regex, ReadOnlySpan <char> subject, PcreMatchSettings settings)
 {
     _regex    = regex;
     _subject  = subject;
     _settings = settings;
 }