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
@[inline]

Make KMP matcher from pattern substring

Equations
@[inline]

Make KMP matcher from pattern string

Equations
@[reducible, inline]

The byte size of the string pattern for the matcher

Equations
  • m.patternSize = m.pattern.bsize

Find all substrings of s matching m.pattern.

Equations

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 }
@[inline]

Returns all the substrings of s that match pattern.

Equations
@[inline]

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

Equations
@[inline]

Returns true iff pattern occurs as a substring of s.

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

Returns all the substrings of s that match pattern.

Equations
@[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
@[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