Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write simple regex in golang?

Tags:

regex

go

I am trying to write regexp that returns the substring for string that begins with dot and until first space. But I am new in regular expressions, so I tried something like that and it doesn't work at all:

package main

import "fmt"
import "regexp"

func main() {
    re := regexp.MustCompile("\\.* ")
    fmt.Printf(re.FindString(".d 1000=11,12")) // Must return d
    fmt.Printf(re.FindString("e 2000=11"))     // Must return nothing or ""
    fmt.Printf(re.FindString(".e2000=11"))     // Must return nothing or ""
}

this code just white 3 white space in golang. What I am doing wrong?

like image 277
Lobster Avatar asked Mar 09 '14 12:03

Lobster


1 Answers

While * is the wildcard in glob matching, it's not the wildcard in regex. In regex, . is the wildcard and * means repetition of 0 or more times. You probably want:

re := regexp.MustCompile("\\..* ")

go playground

But you might notice that it's also returning the dot and space. You can use FindStringSubmatch and use a capture group to fix this, and you can use backsticks so that you don't have to double escape things:

re := regexp.MustCompile(`\.(.*) `)
match := re.FindStringSubmatch(".d 1000=11,12")
if len(match) != 0 {fmt.Printf("1. %s\n", match[1])}

go playground

Though I would prefer using \S* (matches non-space characters) instead of .* to get this match, since it'll reduce the possible backtracking:

re := regexp.MustCompile(`\.(\S*) `)

go playground

like image 86
Jerry Avatar answered Oct 04 '22 00:10

Jerry