如何在Go语言函数中使用正则表达式?

huangapple go评论100阅读模式
英文:

How to pass Regex in golang function

问题

我想将编译后的正则表达式传递给Go语言函数,例如:

package main

import "fmt"
import "regexp"

func foo(r *regexp.Regexp) {
    fmt.Println(r)    
}

func main() {

    r, _ := regexp.Compile("p([a-z]+)ch")
    foo(r)
}

但是它显示"undefined: Regexp"。

有什么提示吗?

英文:

I want to pass a compiled regex to golang function, e.g.

package main

import "fmt"
import "regexp"

func foo(r *Regexp) {
    fmt.Println(r)    
}

func main() {

    r, _ := regexp.Compile("p([a-z]+)ch")
    foo(r)
}

But it is showing "undefined: Regexp"

Any hints?

答案1

得分: 12

使用合格的标识符。例如,

package main

import "fmt"
import "regexp"

func foo(r *regexp.Regexp) {
    fmt.Println(r)
}

func main() {

    r, _ := regexp.Compile("p([a-z]+)ch")
    foo(r)
}

输出:

p([a-z]+)ch

合格标识符

合格标识符是一个带有包名前缀的标识符。包名和标识符都不能是空白的。

QualifiedIdent = PackageName "." identifier .

合格标识符访问不同包中的标识符,该包必须被导入。标识符必须在该包的包块中被导出和声明。

math.Sin // 表示 math 包中的 Sin 函数
英文:

Use a qualified identifier. For example,

package main

import "fmt"
import "regexp"

func foo(r *regexp.Regexp) {
	fmt.Println(r)
}

func main() {

	r, _ := regexp.Compile("p([a-z]+)ch")
	foo(r)
}

Output:

p([a-z]+)ch

> Qualified identifiers
>
> A qualified identifier is an identifier qualified with a package name
> prefix. Both the package name and the identifier must not be blank.
>
> QualifiedIdent = PackageName "." identifier .
>
> A qualified identifier accesses an identifier in a different package,
> which must be imported. The identifier must be exported and declared
> in the package block of that package.
>
> math.Sin // denotes the Sin function in package math

答案2

得分: 0

你也可以使用点导入:

package main

import (
   "fmt"
   . "regexp"
)

func foo(r *Regexp) {
   fmt.Println(r)    
}

func main() {
   r := MustCompile("p([a-z]+)ch")
   foo(r)
}

然而,通常最好使用完全限定的名称。

https://golang.org/ref/spec#Import_declarations

英文:

You can also use a dot import:

package main

import (
   "fmt"
   . "regexp"
)

func foo(r *Regexp) {
   fmt.Println(r)    
}

func main() {
   r := MustCompile("p([a-z]+)ch")
   foo(r)
}

However, typically it will be better to use use the fully qualified name.

<https://golang.org/ref/spec#Import_declarations>

huangapple
  • 本文由 发表于 2014年5月1日 18:05:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/23405629.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定