Documentation ¶
Overview ¶
Example (LiteralCommonPrefix_differentSuffix) ¶
common, a, b, err := literalCommonPrefix(`/users\.html`, `/users\.htm`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /users\.htm, l, , <nil>
Example (LiteralCommonPrefix_error1) ¶
common, a, b, err := literalCommonPrefix(`(`, `/`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , , , error parsing regexp: missing closing ): `(`
Example (LiteralCommonPrefix_error2) ¶
common, a, b, err := literalCommonPrefix(`/`, `)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , , , error parsing regexp: unexpected ): `)`
Example (NewRegex_simple) ¶
r, err := newRegex("/") fmt.Printf("%+v %v\n", r, err) r, err = newRegex(`/index\.html`) fmt.Printf("%+v %v\n", r, err) r, err = newRegex(`/index.html`) fmt.Printf("%+v %v\n", r, err) r, err = newRegex(`(`) fmt.Printf("%+v %v\n", r, err)
Output: { static: / } <nil> { static: /index.html } <nil> { dynamic: ^/index.html } <nil> { } error parsing regexp: missing closing ): `(`
Example (Regex_commonPrefix_dynamic) ¶
r, _ := newRegex("/([a-z]+)") common, a, b, err := r.commonPrefix("/") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("users/([0-9]+)") common, a, b, err = r.commonPrefix("members") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("/([a-z]+)") common, a, b, err = r.commonPrefix("/([a-z]+)/members") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("users/([0-9]+)") common, a, b, err = r.commonPrefix("users/([a-z]+)") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex(`user\.s/([0-9]+)`) common, a, b, err = r.commonPrefix(`user\.s/managers`) fmt.Printf("%s, %s, %s, %v\n", common, a, b, err)
Output: /, ([a-z]+), , <nil> , users/([0-9]+), members, <nil> /([a-z]+), , /members, <nil> users/, ([0-9]+), ([a-z]+), <nil> user\.s/, ([0-9]+), managers, <nil>
Example (Regex_commonPrefix_static) ¶
r, _ := newRegex("/") common, a, b, err := r.commonPrefix("/") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("users") common, a, b, err = r.commonPrefix("members") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("/users") common, a, b, err = r.commonPrefix("/") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("users") common, a, b, err = r.commonPrefix("([0-9]+)") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("/") common, a, b, err = r.commonPrefix("/users") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err) r, _ = newRegex("users/managers") common, a, b, err = r.commonPrefix("users/([0-9]+)") fmt.Printf("%s, %s, %s, %v\n", common, a, b, err)
Output: /, , , <nil> , users, members, <nil> /, users, , <nil> , users, ([0-9]+), <nil> /, , users, <nil> users/, managers, ([0-9]+), <nil>
Example (RegexpCommonPrefix_differentSuffix1) ¶
common, a, b, err := regexpCommonPrefix(`/user_([0-9]+)/xyz`, `/user_([0-9]+)/def`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /user_([0-9]+)/, xyz, def, <nil>
Example (RegexpCommonPrefix_differentSuffix2) ¶
common, a, b, err := regexpCommonPrefix("users/([0-9]+)", "users/managers") fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: users/, ([0-9]+), managers, <nil>
Example (RegexpCommonPrefix_differentSuffix3) ¶
common, a, b, err := regexpCommonPrefix( "/([a-z]+)/members/([0-9]+)", "/([a-z]+)/managers/([0-9]+)", ) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /([a-z]+)/m, embers/([0-9]+), anagers/([0-9]+), <nil>
Example (RegexpCommonPrefix_empty1) ¶
common, a, b, err := regexpCommonPrefix(`user_(\d+)/xyz`, `manager_(\d+)/def`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , user_([0-9]+)/xyz, manager_([0-9]+)/def, <nil>
Example (RegexpCommonPrefix_empty2) ¶
common, a, b, err := regexpCommonPrefix(`(\d+)/xyz`, `(\w+)/def`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , ([0-9]+)/xyz, ([0-9A-Z_a-z]+)/def, <nil>
Example (RegexpCommonPrefix_empty3) ¶
common, a, b, err := regexpCommonPrefix(`(\d+)`, `(\w+)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , ([0-9]+), ([0-9A-Z_a-z]+), <nil>
Example (RegexpCommonPrefix_error1) ¶
common, a, b, err := regexpCommonPrefix("(", "/") fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , , , error parsing regexp: missing closing ): `(`
Example (RegexpCommonPrefix_error2) ¶
common, a, b, err := regexpCommonPrefix("/", ")") fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: , , , error parsing regexp: unexpected ): `)`
Example (RegexpCommonPrefix_leftLonger1) ¶
common, a, b, err := regexpCommonPrefix(`/(\d+)`, `/`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /, ([0-9]+), , <nil>
Example (RegexpCommonPrefix_leftLonger2) ¶
common, a, b, err := regexpCommonPrefix(`/users/(\d+)`, `/users/`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /users/, ([0-9]+), , <nil>
Example (RegexpCommonPrefix_leftLonger3) ¶
common, a, b, err := regexpCommonPrefix(`/users/(\w+)/(\d+)`, `/users/(\w+)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /users/([0-9A-Z_a-z]+), /([0-9]+), , <nil>
Example (RegexpCommonPrefix_rightLonger1) ¶
common, a, b, err := regexpCommonPrefix(`/`, `/(\d+)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /, , ([0-9]+), <nil>
Example (RegexpCommonPrefix_rightLonger2) ¶
common, a, b, err := regexpCommonPrefix(`/users/`, `/users/(\d+)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /users/, , ([0-9]+), <nil>
Example (RegexpCommonPrefix_same1) ¶
common, a, b, err := regexpCommonPrefix(`/(\d+)`, `/([0-9]+)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /([0-9]+), , , <nil>
Example (RegexpCommonPrefix_same2) ¶
common, a, b, err := regexpCommonPrefix(`/user_(\d+)`, `/user_(\d+)`) fmt.Printf("%s, %s, %s, %v", common, a, b, err)
Output: /user_([0-9]+), , , <nil>
Example (StringCommonPrefix_differentSuffix) ¶
common, a, b := stringCommonPrefix("/users/list", "/users/root") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /users/, list, root,
Example (StringCommonPrefix_empty1) ¶
common, a, b := stringCommonPrefix("users", "managers") fmt.Printf("%s, %s, %s,", common, a, b)
Output: , users, managers,
Example (StringCommonPrefix_leftLonger1) ¶
common, a, b := stringCommonPrefix("/users", "/") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /, users, ,
Example (StringCommonPrefix_leftLonger2) ¶
common, a, b := stringCommonPrefix("/users/root", "/users") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /users, /root, ,
Example (StringCommonPrefix_rightLonger1) ¶
common, a, b := stringCommonPrefix("/", "/users") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /, , users,
Example (StringCommonPrefix_rightLonger2) ¶
common, a, b := stringCommonPrefix("/users", "/users/root") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /users, , /root,
Example (StringCommonPrefix_same1) ¶
common, a, b := stringCommonPrefix("/", "/") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /, , ,
Example (StringCommonPrefix_same2) ¶
common, a, b := stringCommonPrefix("/users", "/users") fmt.Printf("%s, %s, %s,", common, a, b)
Output: /users, , ,
Example (Usage) ¶
root, err := New("/", 1) if err != nil { fmt.Println(err) return } root.Add("/users", 2) root.Add(`/users/(\d+)`, 3) fmt.Println(root.Lookup("/")) fmt.Println(root.Lookup("/users")) fmt.Println(root.Lookup("/users/1013")) fmt.Println(root.Lookup("/users/a013"))
Output: 1 [] 2 [] 3 [1013] <nil> []
Index ¶
Examples ¶
- Package (LiteralCommonPrefix_differentSuffix)
- Package (LiteralCommonPrefix_error1)
- Package (LiteralCommonPrefix_error2)
- Package (NewRegex_simple)
- Package (Regex_commonPrefix_dynamic)
- Package (Regex_commonPrefix_static)
- Package (RegexpCommonPrefix_differentSuffix1)
- Package (RegexpCommonPrefix_differentSuffix2)
- Package (RegexpCommonPrefix_differentSuffix3)
- Package (RegexpCommonPrefix_empty1)
- Package (RegexpCommonPrefix_empty2)
- Package (RegexpCommonPrefix_empty3)
- Package (RegexpCommonPrefix_error1)
- Package (RegexpCommonPrefix_error2)
- Package (RegexpCommonPrefix_leftLonger1)
- Package (RegexpCommonPrefix_leftLonger2)
- Package (RegexpCommonPrefix_leftLonger3)
- Package (RegexpCommonPrefix_rightLonger1)
- Package (RegexpCommonPrefix_rightLonger2)
- Package (RegexpCommonPrefix_same1)
- Package (RegexpCommonPrefix_same2)
- Package (StringCommonPrefix_differentSuffix)
- Package (StringCommonPrefix_empty1)
- Package (StringCommonPrefix_leftLonger1)
- Package (StringCommonPrefix_leftLonger2)
- Package (StringCommonPrefix_rightLonger1)
- Package (StringCommonPrefix_rightLonger2)
- Package (StringCommonPrefix_same1)
- Package (StringCommonPrefix_same2)
- Package (Usage)
- New
- Node (AddToChildren_dynamic1)
- Node (AddToChildren_static1)
- Node (AddToChildren_static2)
- Node (AddToChildren_static3)
- Node (Split_dynamic1)
- Node (Split_dynamic2)
- Node (Split_dynamic3)
- Node (Split_dynamic4)
- Node (Split_static1)
- Node (Split_static2)
- Node.Add (Conflict1)
- Node.Add (Conflict2)
- Node.Add (Conflict3)
- Node.Add (Conflict4)
- Node.Add (Conflict5)
- Node.Add (Simple1)
- Node.Add (Simple2)
- Node.Lookup
- Node.Lookup (Loopback)
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Node ¶
type Node struct {
// contains filtered or unexported fields
}
Example (AddToChildren_dynamic1) ¶
n, _ := New("/u", 0) n.children = []*Node{ {regex: regex{static: "sers"}}, {regex: regex{dynamic: regexp.MustCompile("^/")}}, } n.addToChildren("[0-9]+", 1) fmt.Println(n)
Output: { static: /u, data: 0, children: [ { static: sers } { dynamic: ^/ } { dynamic: ^[0-9]+, data: 1 } ] }
Example (AddToChildren_static1) ¶
n, _ := New("/", 0) fmt.Println(n.addToChildren(`(`, 1)) n.addToChildren("users", 1) fmt.Println(n) fmt.Println(n.addToChildren(`(`, 1))
Output: error parsing regexp: missing closing ): `(` { static: /, data: 0, children: [ { static: users, data: 1 } ] } error parsing regexp: missing closing ): `(`
Example (AddToChildren_static2) ¶
n, _ := New("/u", 0) n.children = []*Node{ {regex: regex{dynamic: regexp.MustCompile("^/")}}, } n.addToChildren("sers", 1) fmt.Println(n)
Output: { static: /u, data: 0, children: [ { static: sers, data: 1 } { dynamic: ^/ } ] }
Example (AddToChildren_static3) ¶
n, _ := New("/u", 0) n.children = []*Node{ {regex: regex{static: "nix"}}, {regex: regex{dynamic: regexp.MustCompile("^/1")}}, {regex: regex{dynamic: regexp.MustCompile("^/2")}}, } n.addToChildren("sers", 1) fmt.Println(n)
Output: { static: /u, data: 0, children: [ { static: nix } { static: sers, data: 1 } { dynamic: ^/1 } { dynamic: ^/2 } ] }
Example (Split_dynamic1) ¶
n, _ := New("/[a-z]+", 0) n.split("/", "[a-z]+") fmt.Println(n)
Output: { static: /, children: [ { dynamic: ^[a-z]+, data: 0 } ] }
Example (Split_dynamic2) ¶
n, _ := New(`/users/[0-9]+`, 0) n.split("/u", "sers/[0-9]+") fmt.Println(n)
Output: { static: /u, children: [ { dynamic: ^sers/[0-9]+, data: 0 } ] }
Example (Split_dynamic3) ¶
n, _ := New(`/([a-z]+)/([0-9]+)`, 0) n.split("/([a-z]+)/", "([0-9]+)") fmt.Println(n)
Output: { dynamic: ^/([a-z]+)/, children: [ { dynamic: ^([0-9]+), data: 0 } ] }
Example (Split_dynamic4) ¶
n, _ := New("/users/[0-9]+", 0) n.split("/users/", "[0-9]+") fmt.Println(n)
Output: { static: /users/, children: [ { dynamic: ^[0-9]+, data: 0 } ] }
Example (Split_static1) ¶
n, _ := New("/users", 0) n.split("/", "users") fmt.Println(n) fmt.Println(n.split(`(`, "/")) fmt.Println(n.split(`/`, ")"))
Output: { static: /, children: [ { static: users, data: 0 } ] } error parsing regexp: missing closing ): `(` error parsing regexp: unexpected ): `)`
Example (Split_static2) ¶
n, _ := New("/users/managers", 0) n.split("/users/", "managers") fmt.Println(n)
Output: { static: /users/, children: [ { static: managers, data: 0 } ] }
func New ¶
Example ¶
fmt.Println(New("/", 1)) fmt.Println(New("/users", 2)) fmt.Println(New("/[a-z]+", 3)) fmt.Println(New("/users/[0-9]+", 4)) fmt.Println(New(`/users/\d+`, 5)) fmt.Println(New(`(`, 6))
Output: { static: /, data: 1 } <nil> { static: /users, data: 2 } <nil> { dynamic: ^/[a-z]+, data: 3 } <nil> { dynamic: ^/users/[0-9]+, data: 4 } <nil> { dynamic: ^/users/\d+, data: 5 } <nil> <nil> error parsing regexp: missing closing ): `(`
func (*Node) Add ¶
Example (Conflict1) ¶
root, _ := New("/", 0) fmt.Println(root.Add("/", 1))
Output: path already exists
Example (Conflict2) ¶
root, _ := New("/users", 0) fmt.Println(root.Add("/users", 1))
Output: path already exists
Example (Conflict3) ¶
root, _ := New("/users", 0) root.Add("/", 1) fmt.Println(root.Add("/users", 2))
Output: path already exists
Example (Conflict4) ¶
root, _ := New("/users/active", 0) root.Add("/", 1) root.Add("/users", 2) fmt.Println(root.Add("/users/active", 3))
Output: path already exists
Example (Conflict5) ¶
root, _ := New("/users/([0-9]+)", 0) root.Add("/", 1) root.Add("/users", 2) fmt.Println(root.Add("/users/([0-9]+)", 3))
Output: path already exists
Example (Simple1) ¶
root, _ := New("/", 0) fmt.Println(root.Add("(", 3)) root.Add("/users", 1) root.Add(`/users/(\d+)`, 2) fmt.Println(root)
Output: error parsing regexp: missing closing ): `(` { static: /, data: 0, children: [ { static: users, data: 1, children: [ { dynamic: ^/([0-9]+), data: 2 } ] } ] }
Example (Simple2) ¶
root, _ := New("/", 0) root.Add("/users", 1) root.Add("/users/([0-9]+)", 2) root.Add("/unix/([a-z]+)", 3) root.Add("/users/root", 4) root.Add("/([0-9]+)", 5) fmt.Println(root)
Output: { static: /, data: 0, children: [ { static: u, children: [ { static: sers, data: 1, children: [ { static: /, children: [ { static: root, data: 4 } { dynamic: ^([0-9]+), data: 2 } ] } ] } { dynamic: ^nix/([a-z]+), data: 3 } ] } { dynamic: ^([0-9]+), data: 5 } ] }
func (*Node) Lookup ¶
Example ¶
root, _ := New("/", 0) root.Add("/users", 1) root.Add("/users/123/([0-9]+)", 22) root.Add("/users/([0-9]+)", 2) root.Add("/unix/([a-z]+)/([0-9.]+)", 3) root.Add("/users/root", 4) root.Add("/([0-9]+)", 5) fmt.Println(root.Lookup("/")) fmt.Println(root.Lookup("/users")) fmt.Println(root.Lookup("/users/123")) fmt.Println(root.Lookup("/users/123/456")) fmt.Println(root.Lookup("/unix/linux/4.4.0")) fmt.Println(root.Lookup("/users/root")) fmt.Println(root.Lookup("/987")) fmt.Println(root.Lookup("404")) fmt.Println(root.Lookup("/users404")) fmt.Println(root.Lookup("/unix/linux/4.4.0a"))
Output: 0 [] 1 [] 2 [123] 22 [456] 3 [linux 4.4.0] 4 [] 5 [987] <nil> [] <nil> [] <nil> []
Example (Loopback) ¶
root, _ := New("/", 0) root.Add(`/(\w+)`, 1) root.Add(`/(\w+)/abc`, 2) root.Add(`/([a-z]+)/def`, 3) fmt.Println(root.Lookup("/")) fmt.Println(root.Lookup("/users")) fmt.Println(root.Lookup("/users/abc")) fmt.Println(root.Lookup("/users/def"))
Output: 0 [] 1 [users] 2 [users] 3 [users]
func (*Node) StringIndent ¶
Click to show internal directories.
Click to hide internal directories.