go源码库学习之regexp库

本文详细介绍Go语言中正则表达式的使用方法,包括不同方式的编译与匹配操作、字符串替换、查找等功能,并展示了如何利用正则表达式进行文本处理。
package main

import (
	"fmt"
	"regexp"
	"regexp/syntax"
	"strings"
)

func main()  {
	//regexpMain()
	regexpSyntaxMain()
}

func regexpMain()  {
	// 解析正则表达式,如果成功,返回 一个可用于匹配文本的Regexp对象。
	// 采用最左最短方式搜索
	regexpCompile,err := regexp.Compile("foo.?")
	if err != nil {
		fmt.Println("regexpCompile err: ",err)
	}

	// 解析正则表达式,如果成功,返回 一个可用于匹配文本的Regexp对象。
	// 采用最左最短方式搜索,如果表达式不能被解析就会panic
	regexpMustCompile := regexp.MustCompile("foo(?P<first>.?)")
	fmt.Println(regexpMustCompile.String())

	// 解析正则表达式,如果成功,返回 一个可用于匹配文本的Regexp对象。
	// 采用最左最长方式搜索
	regexpCompilePOSIX,_ := regexp.CompilePOSIX("(foo.?)")
	fmt.Println(regexpCompilePOSIX.String())

	// 解析正则表达式,如果成功,返回 一个可用于匹配文本的Regexp对象。
	// 采用最左最长方式搜索,如果表达式不能被解析就会panic
	regexpMustCompilePOSIX := regexp.MustCompilePOSIX("foo.?")
	fmt.Println(regexpMustCompilePOSIX.String())

	// 返回用户匹配的正则源文本
	regexpString := regexpCompile.String()
	fmt.Println(regexpString)

	// 从re复制的新的Regexp对象
	regexpCopy := regexpCompile.Copy()
	fmt.Println(regexpCopy.String())

	// 统计正则表达式中的分组个数(不包括“非捕获的分组”)
	regexpNumSubexp := regexpMustCompile.NumSubexp()
	fmt.Println(regexpNumSubexp)

	// 返回正则表达式中的分组名称列表,未命名的分组返回空字符串
	regexpSubexpNames := regexpMustCompile.SubexpNames()
	fmt.Println(regexpSubexpNames)

	// 返回具有给定名称的第一个子表达式的索引,如果没有具有该名称的子表达式,则返回-1。
	regexpSubexpIndex := regexpMustCompile.SubexpIndex("bob")
	fmt.Println(regexpSubexpIndex)

	// 返回以正则表达式任何开头的字符串,字符串包含整个正则则返回true
	// 示例:foo.? 返回foo,true
	regexpLiteralPrefixPrefix,regexpLiteralPrefixcomplete := regexpCompile.LiteralPrefix()
	fmt.Println(regexpLiteralPrefixPrefix,regexpLiteralPrefixcomplete)

	// 输入的数据 r(RuneReader) 是否包含正则表达式的任何匹配项
	regexpMatchReader := regexpCompile.MatchReader(strings.NewReader("hello the food foo!"))
	fmt.Println(regexpMatchReader)

	// 输入的数据 r(String) 是否包含正则表达式的任何匹配项
	regexpMatchString := regexpCompile.MatchString("hello the food foo!")
	fmt.Println(regexpMatchString)

	// 输入的数据 字节切片(Byte) 是否包含正则表达式的任何匹配项
前言:本资源来自于javaeye,原资源链接地址:http://www.javaeye.com/topic/67398 原文如下: 以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 apache网站下下载 在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧. 这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1.匹配图象; 2 匹配email地址; 3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6 匹配电话; 7 匹配身份证 8 匹配邮编代码 9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号 0) 12 匹配正整数 13 匹配非正整数(负整数 + 0) 14 匹配负整数; 15. 匹配整数 ; 16 匹配非负浮点数(正浮点数 + 0) 17. 匹配正浮点数 18 匹配非正浮点数(负浮点数 + 0) 19 匹配负浮点数; 20 .匹配浮点数; 21. 匹配由26个英文字母组成的字符串; 22. 匹配由26个英文字母的大写组成的字符串 23 匹配由26个英文字母的小写组成的字符串 24 匹配由数字和26个英文字母组成的字符串; 25 匹配由数字、26个英文字母或者下划线组成的字符串; java源码: /* * Created on 2005-4-15 * * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The backslash character \\ 反斜杠 * \0n The character with octal value 0n (0 <= n <= 7) \0n 十进制数 (0 <= n <= 7) * \0nn The character with octal value 0nn (0 <= n <= 7) \0nn 十进制数 0nn (0 <= n <= 7) * \0mnn The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7) \0mnn 十进制数 0mnn (0 <= m <= 3, 0 <= n <= 7) * \xhh The character with hexadecimal value 0xhh \xhh 十六进制数 0x
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值