Documentation

Batteries.Data.String.Matcher

Knuth-Morris-Pratt matcher type

This type is used to keep data for running the Knuth-Morris-Pratt (KMP) string matching algorithm. KMP is a linear time algorithm to locate all substrings of a string that match a given pattern. Generating the algorithm data is also linear in the length of the pattern but the data can be re-used to match the same pattern over different strings.

The KMP data for a pattern string can be generated using Matcher.ofString. Then Matcher.find? and Matcher.findAll can be used to run the algorithm on an input string.

def m := Matcher.ofString "abba"

#eval Option.isSome <| m.find? "AbbabbA" -- false
#eval Option.isSome <| m.find? "aabbaa" -- true

#eval Array.size <| m.findAll "abbabba" -- 2
#eval Array.size <| m.findAll "abbabbabba" -- 3
Instances For
    @[inline]

    Make KMP matcher from pattern substring

    Equations
    Instances For
      @[inline]

      Make KMP matcher from pattern string

      Equations
      Instances For
        @[reducible, inline]

        The byte size of the string pattern for the matcher

        Equations
        • m.patternSize = m.pattern.bsize
        Instances For

          Find all substrings of s matching m.pattern.

          Equations
          Instances For

            Find the first substring of s matching m.pattern, or none if no such substring exists.

            Equations
            • m.find? s = match m.next? s with | none => none | some (s, snd) => some { str := s.str, startPos := { byteIdx := s.startPos.byteIdx - m.patternSize }, stopPos := s.startPos }
            Instances For
              @[inline]

              Returns all the substrings of s that match pattern.

              Equations
              Instances For
                @[inline]

                Returns the first substring of s that matches pattern, or none if there is no such substring.

                Equations
                Instances For
                  @[inline]

                  Returns true iff pattern occurs as a substring of s.

                  Equations
                  • s.containsSubstr pattern = (s.findSubstr? pattern).isSome
                  Instances For
                    @[reducible, inline]

                    Returns all the substrings of s that match pattern.

                    Equations
                    Instances For
                      @[reducible, inline]

                      Returns the first substring of s that matches pattern, or none if there is no such substring.

                      Equations
                      • s.findSubstr? pattern = s.toSubstring.findSubstr? pattern
                      Instances For
                        @[reducible, inline]
                        abbrev String.containsSubstr (s : String) (pattern : Substring) :

                        Returns true iff pattern occurs as a substring of s.

                        Equations
                        • s.containsSubstr pattern = s.toSubstring.containsSubstr pattern
                        Instances For