Go语言之正则表达式

[TOC]

Go语言正则表达式

方式一:使用Compile

package main

import (
    "fmt"
    "regexp"
)

const text = "my email is [email protected]"

func main() {
    //re 是 正则表达式的匹配器
    re, err := regexp.Compile("[email protected]")
    if err != nil {
        panic(err)
    }
    result := re.FindString(text)
    fmt.Println("result:\t", result)
}

运行结果:

result:  [email protected]

Process finished with exit code 0  

==此方法式,存在的问题?==
    Compile方法中的正则表达式,Go语言不知道是否正确,有可能用户写的正则表达式是错误的。

方式二:使用MustCompile方法

==好处就是,参数必须是正确的正则表达式==

例子1

package main

import (
    "fmt"
    "regexp"
)

const text_1 = "my email is [email protected]"

func main() {
    //目前的正则表达式,仅仅是匹配一个值,[email protected]
    re := regexp.MustCompile("[email protected]")
    match := re.FindString(text_1)

    fmt.Println(match)
}

运行结果:

[email protected]

Process finished with exit code 0  


==问题 .+ 与 .*的区别==

. 表示可以匹配任何字符  

.+ 表示可以匹配1以上的字符,也就是说,只少有一个字符  

.* 表示可以匹配0个以上的字符,也就是说,0个以上字符  

其实,+,* 都是匹配的数量

例子2

package main

import (
    "fmt"
    "regexp"
)

const text_1 = "my email is [email protected]"

func main() {
    //目前的正则表达式,仅仅是匹配一个值,[email protected]
    re := regexp.MustCompile("[email protected]")
    match := re.FindString(text_1)

    fmt.Println(match)
}

运行结果:

[email protected]

Process finished with exit code 0


==如何匹配正则表达式中一个点呢?==

如在点的前面,添加一个反斜杠\,
但是,Go语言会将反斜杠当做是转义字符,因此,需要添加两个反斜杠 \\.
同时,Go 语言,可以不使用"", 也可以使用反单引号,`` 来引用正则表达式,这样的话,就不需要反斜杠了,

例子3

package main

import (
    "fmt"
    "regexp"
)

const text_3 = "my email is [email protected]"

func main() {
    //目前的正则表达式,仅仅是匹配一个值,[email protected]
    re := regexp.MustCompile(`[email protected]+\..+`)
    match := re.FindString(text_3)

    fmt.Println(match)
}

运行结果:

my email is [email protected]

Process finished with exit code 0

==存在问题?==
将这条语句全部打印出来,而不是仅仅符合要求的哪些字段

例子4

package main

import (
    "fmt"
    "regexp"
)

const text_4 = "my email is [email protected]"

func main() {
    //只匹配小写字母,大写字母,数字,不允许有特殊符号
    re := regexp.MustCompile(`[a-zA-Z0-9][email protected][a-zA-Z0-9]+\.[a-zA-Z0-9]+`)
    match := re.FindString(text_4)

    fmt.Println(match)
}

运行结果:

[email protected]

Process finished with exit code 0  

例子5 匹配多个时,如何处理?

package main

import (
    "fmt"
    "regexp"
)

const text_5 = `
    my email is [email protected]
    my email is [email protected]
    my email is [email protected]
    my email is [email protected]
    my email is [email protected]
`

func main() {
    //在[]里,  . 不需要 添加 转义字符
    re := regexp.MustCompile(`[a-zA-Z0-9][email protected][a-zA-Z0-9]+\.[a-zA-Z0-9]+`)
    //-1 表示,要匹配所有满足条件的词
    match := re.FindAllString(text_5, -1)

    fmt.Println(match)
}

运行结果:

[[email protected] [email protected] [email protected] [email protected] [email protected]]

Process finished with exit code 0

例子6,如何提取出 名字,域名呢?

==正则表达式具有提取功能,只需要将要提取的字符,用小括号 括起来就可以了==

package main

import (
    "fmt"
    "regexp"
)

const text_6 = `
    my email is [email protected]
    my email is [email protected]
    my email is [email protected]
    my email is [email protected]
    my email is [email protected]
`

func main() {
    //在[]里,  . 不需要 添加 转义字符
    re := regexp.MustCompile(`([a-zA-Z0-9]+)@([a-zA-Z0-9]+)(\.[a-zA-Z0-9.]+)`)
    //-1 表示,要匹配所有满足条件的词
    match := re.FindAllStringSubmatch(text_6, -1)

    for _, value := range match {
        fmt.Println(value)
    }
}

运行结果:

[[email protected] k8sAndDocker google .com]
[[email protected] spark qq .com]
[[email protected] hadoop 126 .com]
[[email protected] kafka 163 .com]
[[email protected] docker 163docker .com.cn]

Process finished with exit code 0   












原文地址:http://blog.51cto.com/xingej/2113546

时间: 2024-11-07 08:56:45

Go语言之正则表达式的相关文章

linux C语言处理正则表达式

Linux下C语言处理正则表达式——regex.h 具体函数介绍 编译正则表达式函数 int regcomp(regex_t *preg, const char *regex, int cflags); 其中preg用于保存编译后的正则表达式,regex是我们写的正则表达式.cflags标志位后面再说. 先说说regex_t结构体: 对于这个结构体而言,我们只要记住,它是编译后的正则表达式,后面的匹配是用编译后的正则表达式,这样效率更高,而不是使用我们自己写的原始的正则表达式.此外,还要知道re

C语言调用正则表达式

标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库. C语言处理正则表达式常用的函数有regcomp().regexec().regfree()和regerror(),一般分为三个步骤,如下所示: C语言中使用正则表达式一般分为三步: 编译正则表达式 regcomp() 匹配正则表达式 regexec() 释

Go语言:正则表达式的使用

Go语言的正则表达式使用很简单,示例代码: package test import ( "fmt" "regexp" ) func RegixBase() { //findTest() //findIndexTest() //findStringTest() //findChinesString() //findNumOrLowerLetter() findAndReplace() } //传入[]byte,返回[]byte func findTest() { st

8_Shell语言———扩展正则表达式和egrep、fgrep命令

egrep命令等同于 grep命令加上 -E选项,它支持扩展的正则表达式. 扩展正则表达式和基本正则表达式类似,不同之处在于增加了一些新功能,部分元字符的用法也略有不同: .:任意单个字符 []:指定范围内的任意单个字符 [^]:取反 *:匹配其前的字符0次.1次或多次 ?:0次或1次 {m,n}:至少m次,至多n次 \<:词首锚定 \>:词尾锚定 ^:行首锚定 $:行尾锚定 -----------上述部分和基本正则表达式一致-------- +:匹配其前的字符至少一次,等同于\{1,\} 注

各种语言工具正则表达式语法比较

各种语言工具正则表达式语法比较   grep 2.5.1 egrep 2.5.1 sed 3.02sed 4.07 awk 3.1.1 perl 5.8.0 vim 6.1 JavaScript 转义 \ \ \ \ \ \ \ 行头 ^ ^ ^ ^ ^ ^ ^ 行尾 $ $ $ $ $ $ $ n个 {n} {m,n} {m,} {,n} \{n\} {n} \{n\} {n}或\{n\} 仅定义 --posix 或 --re-interval有效(要表达}和{,得用\\{和\\} 没有定义-

R语言之正则表达式

在我看来,正则表达式的主要用途有两种:①查找特定的信息②查找并编辑特定的信息,也就是我们经常用的替换..比如我们要在Word,记事本等里面使用快捷键Ctrl+F,进行查找一个特定的字符,或者替换一个字符,这就使用了正则表达式. 正则表达式的功能非常强大,尤其是在文本数据进行处理中显得更加突出.R中的grep.grepl.sub.gsub.regexpr.gregexpr等函数都使用正则表达式的规则进行匹配.这几个函数原型如下: grep(pattern, x, ignore.case = FAL

C语言使用正则表达式

一.简介 一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要.正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触.很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛.不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用.C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用regex.h提供

文法、语言、正则表达式

文法的形式定义于分类 一个上下文无关文法有四个元素组成: 一个终结符号集合,也称为词法单元. 一个非终结符号集合,也称为语法变量. 一个产生式集合. 一个开始符号. 文法G可以抽象成四元组的形式:G=(VN,VT,P,S) 其中VN表示非终结符集,VT表示终结符集,P表示产生式集,S表示开始符号. 文法G描述的语言用L(G)表示L(G)={w|w∈VT*且S=+>w} 符号串w从开始符号推导出来 w仅由终结符号组成 w称为该语言的句子 L(G)由所有这样的句子构成 约定: 大写字母A~Z表示非终

Go语言中正则表达式的使用

许多程序语言都支持使用正则表达式对字符串进行操作,Go语言也不例外,正则表达式的语法网上很多教程,本文主要介绍在Go语言中如何使用正则表达式,通过以下实例进行说明,并添加了详细的注释,不会的小伙伴一看就明白了. func main() { // 要操作的字符串 str := "abcde 1234 [email protected] [email protected] [email protected]" // 正则表达式字符串----用于匹配邮箱地址,来源于网络 regexStr :