You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.7 KiB
Go
157 lines
3.7 KiB
Go
package regex_test
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gitea.twomorecents.org/Rockingcool/kleingrep/regex"
|
|
)
|
|
|
|
func ExampleReg_Find() {
|
|
regexStr := "b|a"
|
|
regexComp := regex.MustCompile(regexStr)
|
|
|
|
match, _ := regexComp.Find("banana")
|
|
fmt.Println(match.String())
|
|
|
|
// Output: 0 1
|
|
}
|
|
|
|
func ExampleReg_FindAll() {
|
|
regexStr := "b|a"
|
|
regexComp := regex.MustCompile(regexStr)
|
|
|
|
matches := regexComp.FindAll("banana")
|
|
for _, group := range matches {
|
|
fmt.Println(group.String())
|
|
}
|
|
|
|
// Output: 0 1
|
|
// 1 2
|
|
// 3 4
|
|
// 5 6
|
|
}
|
|
|
|
func ExampleReg_FindString() {
|
|
regexStr := `\d+`
|
|
regexComp := regex.MustCompile(regexStr)
|
|
|
|
matchStr := regexComp.FindString("The year is 2025")
|
|
fmt.Println(matchStr)
|
|
// Output: 2025
|
|
}
|
|
|
|
func ExampleReg_FindSubmatch() {
|
|
regexStr := `(\d)\.(\d)(\d)`
|
|
regexComp := regex.MustCompile(regexStr)
|
|
|
|
match, _ := regexComp.FindSubmatch("3.14")
|
|
fmt.Println(match[0])
|
|
fmt.Println(match[1])
|
|
fmt.Println(match[2])
|
|
// Output: 0 4
|
|
// 0 1
|
|
// 2 3
|
|
}
|
|
|
|
func ExampleReg_FindStringSubmatch() {
|
|
regexStr := `(\d{4})-(\d{2})-(\d{2})`
|
|
regexComp := regex.MustCompile(regexStr)
|
|
inputStr := `The date is 2025-02-10`
|
|
|
|
match := regexComp.FindStringSubmatch(inputStr)
|
|
fmt.Println(match[1])
|
|
fmt.Println(match[3])
|
|
// Output: 2025
|
|
// 10
|
|
}
|
|
|
|
func ExampleReg_FindAllSubmatch() {
|
|
regexStr := `(\d)\.(\d)(\d)`
|
|
regexComp := regex.MustCompile(regexStr)
|
|
|
|
matches := regexComp.FindAllSubmatch("3.14+8.97")
|
|
fmt.Println(matches[0][0]) // 0-group (entire match) of 1st match (0-indexed)
|
|
fmt.Println(matches[0][1]) // 1st group of 1st match
|
|
fmt.Println(matches[1][0]) // 0-group of 2nd match
|
|
fmt.Println(matches[1][1]) // 1st group of 2nd math
|
|
// Output: 0 4
|
|
// 0 1
|
|
// 5 9
|
|
// 5 6
|
|
}
|
|
|
|
func ExampleReg_FindAllString() {
|
|
regexStr := `<0-255>\.<0-255>\.<0-255>\.<0-255>`
|
|
inputStr := `192.168.220.7 pings 9.9.9.9`
|
|
regexComp := regex.MustCompile(regexStr)
|
|
|
|
matchStrs := regexComp.FindAllString(inputStr)
|
|
|
|
fmt.Println(matchStrs[0])
|
|
fmt.Println(matchStrs[1])
|
|
// Output: 192.168.220.7
|
|
// 9.9.9.9
|
|
}
|
|
|
|
func ExampleReg_FindAllStringSubmatch() {
|
|
// 'https' ...
|
|
// followed by 1 or more alphanumeric characters (including period) ...
|
|
// then a forward slash ...
|
|
// followed by one more of :
|
|
// word character,
|
|
// question mark,
|
|
// period,
|
|
// equals sign
|
|
regexStr := `https://([a-z0-9\.]+)/([\w.?=]+)`
|
|
regexComp := regex.MustCompile(regexStr, regex.RE_CASE_INSENSITIVE)
|
|
inputStr := `You can find me at https://twomorecents.org/index.html and https://news.ycombinator.com/user?id=aadhavans`
|
|
|
|
matchIndices := regexComp.FindAllStringSubmatch(inputStr)
|
|
fmt.Println(matchIndices[0][1]) // 1st group of 1st match (0-indexed)
|
|
fmt.Println(matchIndices[0][2]) // 2nd group of 1st match
|
|
fmt.Println(matchIndices[1][1]) // 1st group of 2nd match
|
|
fmt.Println(matchIndices[1][2]) // 2nd group of 2nd match
|
|
// Output: twomorecents.org
|
|
// index.html
|
|
// news.ycombinator.com
|
|
// user?id=aadhavans
|
|
|
|
}
|
|
|
|
func ExampleReg_Expand() {
|
|
inputStr := `option1: value1
|
|
option2: value2`
|
|
regexStr := `(\w+): (\w+)`
|
|
templateStr := "$1 = $2\n"
|
|
regexComp := regex.MustCompile(regexStr, regex.RE_MULTILINE)
|
|
result := ""
|
|
for _, submatches := range regexComp.FindAllSubmatch(inputStr) {
|
|
result = regexComp.Expand(result, templateStr, inputStr, submatches)
|
|
}
|
|
fmt.Println(result)
|
|
// Output: option1 = value1
|
|
// option2 = value2
|
|
|
|
}
|
|
|
|
func ExampleReg_LiteralPrefix() {
|
|
regexStr := `a(b|c)d*`
|
|
regexComp := regex.MustCompile(regexStr)
|
|
prefix, complete := regexComp.LiteralPrefix()
|
|
fmt.Println(prefix)
|
|
fmt.Println(complete)
|
|
// Output: a
|
|
// false
|
|
}
|
|
|
|
func ExampleReg_Longest() {
|
|
regexStr := `x|xx`
|
|
inputStr := "xx"
|
|
regexComp := regex.MustCompile(regexStr)
|
|
fmt.Println(regexComp.FindString(inputStr))
|
|
regexComp.Longest()
|
|
fmt.Println(regexComp.FindString(inputStr))
|
|
// Output: x
|
|
// xx
|
|
}
|