Welcome To Golang By Example

Alternation (OR) of regexes in Go (Golang)

Table of Contents

Overview

It is similar to OR operation. Join two regexes by using the | operator. If there are two regexes r1 and r2, then alternation is represented as below

r1|r2

It will either match r1 or r2 with preference given to rq. Basically, if string s matches regex r1 and string t matches regex r2, then r1|r2 will match s or t.  What does it mean when we say that preference will be given to r1. It means that if in the given sample string it will try to match r1 first and if r1 is not found, it will try to match r2.

Program

package main
import (
    "fmt"
    "regexp"
)
func main() {
    sampleRegex := regexp.MustCompile("abc|xyz")
    match := sampleRegex.Match([]byte("abc"))

    fmt.Println(match)
    match = sampleRegex.Match([]byte("xyz"))
    fmt.Println(match)

    match = sampleRegex.Match([]byte("abcxyz"))
    fmt.Println(match)

    match = sampleRegex.Match([]byte("abd"))
    fmt.Println(match)
}

Output

true
true
true
false

It matches

abc
xyz

It also matches.

abcxyz

This is because it matches the prefix “abc” and gives a true match.

Also, it does not match

abd

Alternation can also be between more than 2 regexes. Below is an example for the same

package main
import (
    "fmt"
    "regexp"
)
func main() {
    sampleRegex := regexp.MustCompile("abc|xyz|123")

    match := sampleRegex.Match([]byte("abc"))
    fmt.Println(match)

    match = sampleRegex.Match([]byte("xyz"))
    fmt.Println(match)

    match = sampleRegex.Match([]byte("123"))
    fmt.Println(match)

    match = sampleRegex.Match([]byte("abcxyz123"))
    fmt.Println(match)

    match = sampleRegex.Match([]byte("abd"))
    fmt.Println(match)
}

Output

true
true
true
true
false

It matches

abc
xyz
123

It also matches

abcxyz123

This is because it matches the prefix “abc” and gives a true match.

Also, it does not match

abd

Also, check out our Golang advance tutorial Series – Golang Advance Tutorial