package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)# Time.
(?<=\|) (?:\s+ [^(]? )
([0-2][0-9]) (?:\s*) (:) \s* ([0-5][0-9]) (?:\s*)
(-)? (?: (?:\s*) ([0-2][0-9]) (?:\s*) (:) (?:\s*) ([0-5][0-9]) )?
(?= [^\)]? \s+ \|)
|
# Total.
(?<=\| ) (?:\s+) (\d+[m]) (?=\s+\|)`)
var str = `# Todo
| Tracker | Task | Backlog |
| ----------: | :------------- | :------------ |
| 00:00-00:00 | [x] Task one | [[wiki.link |
| 00:00-00:00 | | |
| 00:00-00:00 | | |
| 00:00- | | |
| | | |
| 10m | | |
| | | |
| 00:00 | [<] Task two | [[wiki.link]] |
| | [<] Task three | [[wiki.link]] |
| (00:00) | [<] Task two | [[wiki.link]] |
| 00:00) | [<] Task two | [[wiki.link]] |
Time outside the table 00:00 that must not be selected.
Group 1: \`00\` (timer.start.hour)
Group 2: \`:\` (timer.start.colon)
Group 3: \`00\` (timer.start.minute)
Group 4: \`-\` (timer.separator)
Group 5: \`00\` (timer.end.hour)
Group 6: \`:\` (timer.end.colon)
Group 7: \`00\` (timer.end.minute)
Group 8: \`00\` (timer.total)
# Alternative
# Time (not supported by VS Code).
#(?=
# \| \s+ .*?
# ([0-2][0-9]) \s* (:) \s* ([0-5][0-9])
# (?:
# \s* (-) \s*
# ([0-2][0-9]) \s* (:) \s* ([0-5][0-9])
# )?
# .*? \s+ \|
#)
#|
# Total not supported by VS Code).
#(?= \| \s+ (\dm) \s+ \| )`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Golang, please visit: https://golang.org/pkg/regexp/