|
|
@ -121,5 +121,36 @@ this engine will _always_ go for the longest possible match, regardless of the o
|
|
|
|
My engine does not support byte-slices. When a matching function receives a string, it converts it into a
|
|
|
|
My engine does not support byte-slices. When a matching function receives a string, it converts it into a
|
|
|
|
rune-slice to iterate through it. While this has some space overhead, the convenience of built-in unicode
|
|
|
|
rune-slice to iterate through it. While this has some space overhead, the convenience of built-in unicode
|
|
|
|
support made the tradeoff worth it.
|
|
|
|
support made the tradeoff worth it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. Return values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rather than using primitives for return values, my engine defines two types that are used as return
|
|
|
|
|
|
|
|
values: a [Group] represents a capturing group, and a [Match] represents a list of groups.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[regexp] specifies a regular expression that gives a list of all the matching functions that it supports. The
|
|
|
|
|
|
|
|
equivalent expression for this engine is:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Find(All)?(String)?(Submatch)?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Reg.Find] returns the index of the leftmost match in the string.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If a function contains 'All' it returns all matches instead of just the leftmost one.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If a function contains 'String' it returns the matched text, rather than the indices.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If a function contains 'Submatch' it returns the match, including all submatches found by
|
|
|
|
|
|
|
|
capturing groups.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The term '0-group' is used to refer to the 0th capturing group of a match (which is the entire match).
|
|
|
|
|
|
|
|
Given the following regex:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x(y)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
and the input string:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xyz
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The 0th group would contain 'xy' and the 1st group would contain 'y'. Any matching function without 'Submatch' in its name
|
|
|
|
|
|
|
|
returns the 0-group.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
package regex
|
|
|
|
package regex
|
|
|
|