如何在Golang中编写简单的正则表达式?

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?

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
", 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

The first 2 characters you write \\ mean that you're escaping backslash, so you're expecting backslash as the first character. You should write ^\..*? instead:

  • ^ - means beginning
  • \. - means escaping dot (so together with one above means that you expect dot as the first character)
  • .*? - any character (dot), any number of them (asterisk), not greedy (question mark) until space (space)

Non-greedy means that it will stop at first space not at the last one