From dda2418255c46d743ab0b9de438905690ce5d251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Schw=C3=B6rer?= Date: Wed, 29 Mar 2023 19:53:10 +0200 Subject: [PATCH] v0.0.96 --- _data/version.sh | 2 +- rext/wrapper.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/_data/version.sh b/_data/version.sh index f35d4b9..9af447c 100755 --- a/_data/version.sh +++ b/_data/version.sh @@ -21,7 +21,7 @@ if [ "$( git rev-parse --abbrev-ref HEAD )" != "master" ]; then exit 1 fi -git pull --rebase +git pull --ff curr_vers=$(git describe --tags --abbrev=0 | sed 's/v//g') diff --git a/rext/wrapper.go b/rext/wrapper.go index fff3122..08032a5 100644 --- a/rext/wrapper.go +++ b/rext/wrapper.go @@ -29,6 +29,10 @@ type RegexMatchGroup struct { end int } +type OptRegexMatchGroup struct { + v *RegexMatchGroup +} + func W(rex *regexp.Regexp) Regex { return ®exWrapper{rex: rex, subnames: rex.SubexpNames()} } @@ -97,7 +101,7 @@ func (m RegexMatch) GroupByIndex(idx int) RegexMatchGroup { return RegexMatchGroup{haystack: m.haystack, start: m.submatchesIndex[idx*2], end: m.submatchesIndex[idx*2+1]} } -// GroupByName returns the value of a matched group (group 0 == whole match) +// GroupByName returns the value of a matched group (panics if not found!) func (m RegexMatch) GroupByName(name string) RegexMatchGroup { for idx, subname := range m.subnames { if subname == name { @@ -107,6 +111,16 @@ func (m RegexMatch) GroupByName(name string) RegexMatchGroup { panic("failed to find regex-group by name") } +// GroupByName returns the value of a matched group (returns empty OptRegexMatchGroup if not found) +func (m RegexMatch) GroupByNameOrEmpty(name string) OptRegexMatchGroup { + for idx, subname := range m.subnames { + if subname == name { + return OptRegexMatchGroup{&RegexMatchGroup{haystack: m.haystack, start: m.submatchesIndex[idx*2], end: m.submatchesIndex[idx*2+1]}} + } + } + return OptRegexMatchGroup{} +} + // --------------------------------------------------------------------------------------------------------------------- func (g RegexMatchGroup) Value() string { @@ -128,3 +142,40 @@ func (g RegexMatchGroup) Range() (int, int) { func (g RegexMatchGroup) Length() int { return g.end - g.start } + +// --------------------------------------------------------------------------------------------------------------------- + +func (g OptRegexMatchGroup) Value() string { + return g.v.Value() +} + +func (g OptRegexMatchGroup) ValueOrEmpty() string { + if g.v == nil { + return "" + } + return g.v.Value() +} + +func (g OptRegexMatchGroup) IsEmpty() bool { + return g.v == nil +} + +func (g OptRegexMatchGroup) Exists() bool { + return g.v != nil +} + +func (g OptRegexMatchGroup) Start() int { + return g.v.Start() +} + +func (g OptRegexMatchGroup) End() int { + return g.v.End() +} + +func (g OptRegexMatchGroup) Range() (int, int) { + return g.v.Range() +} + +func (g OptRegexMatchGroup) Length() int { + return g.v.Length() +}