【Go语言】golang处理正则匹配和常见的正则表达式

今天简单介绍golang如何处理正则表达式。直接上代码了。

package main

import (
	"fmt"
	"regexp"
)

var reg *regexp.Regexp
var pattern string
var source string

func regexpMatch() {
	//  xy 匹配x y
	// x|y  匹配x或者y 优先x
	// source = "asdfdsxxxyyfergsfasfxyfa"
	// pattern = `x|y|a`

	//x* 匹配零个或者多个x,优先匹配多个
	//x+ 匹配一个或者多个x,优先匹配多个
	//x? 匹配零个或者一个x,优先匹配一个

	//source = "xxxxewexxxasdfdsxxxyyfergsfasfxyfa"
	//pattern = `x*`

	// x{n,m} 匹配n个到m个x,优先匹配m个
	// x{n,}  匹配n个到多个x,优先匹配更多
	// x{n} 或者x{n}?  只匹配n个x
	//source = "xxxxxxxewexxxasdfdsxxxyyfergsfasfxyfa"
	//pattern = `x{4,}`

	// x{n,m}? 匹配n个到m个x,优先匹配n个
	// x{n,}?  匹配n个到多个x,优先匹配n个
	// x*?   匹配零个或者多个x,优先匹配0个
	// x+?   匹配一个或者多个x,优先匹配1个
	// x??   匹配零个或者一个x,优先匹配0个
	//source = "xxxxxxxewexxxasdfdsxxxyyfergsfasfxyfa"
	//pattern = `x??`

	//[\d] 或者[^\D] 匹配数字
	//[^\d]或者 [\D] 匹配非数字
	//source = "xx435ff5237yy6346fergsfasfxyfa"
	//pattern = `[\d]{3,}` //匹配3个或者更多个数字

	//source = "xx435ffGUTEYgjk52RYPHFY37yy6346ferg6987sfasfxyfa"
	//pattern = `[a-z]{3,}` //三个或者多个小写字母

	//source = "xx435ffGUTEYgjk52RYPHFY37yy6346ferg6987sfasfxyfa"
	//pattern = `[[:alpha:]]{5,}` //5个或者多个字母,相当于A-Za-z

	//source = "xx435,./$%(*(_&jgshgs发个^$%ffG返回福hjh放假啊啥UTEYgjk52RYPHFY37yy6346ferg6987sfasfxyfa"
	//pattern = `[\p{Han}]+` //匹配连续的汉字

	//source = "13244820821HG74892109977HJA15200806084S11233240697hdgsfhah假发发货"
	//pattern = `1[3|5|7|8|][\d]{9}` //匹配电话号码

	//source = "132@12.comGKGk15@163.cn200806084S11233240697hdgsfhah假发发货"
	//pattern = `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` //匹配电子邮箱

	//匹配用户名或者密码 `^[a-zA-Z0-9_-]{4,16}$`  字母或者数字开头,区分大小写,最短4位最长16位
	//匹配IP地址1 `^$(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$`

	//匹配IP地址2
	//pattern = `((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)`

	//匹配日期 年-月-日 `(\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))`
	//匹配日期 月-日-年  `((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})`
	//匹配时间 小时:分钟 24小时制 ` ((1|0?)[0-9]|2[0-3]):([0-5][0-9]) `
	//匹配邮编  `[1-9][\d]5`
	//匹配URL `[a-zA-z]+://[^\s]*`

	reg = regexp.MustCompile(pattern)
	fmt.Printf("%s", reg.FindAllString(source, -1))

}
func main() {
	regexpMatch()
}

现在介绍常见的正则表达式。参考博客:http://www.cnblogs.com/wenanry/archive/2010/09/06/1819552.html

正则表达式中有很多上述的具有特别意义的字符。首先是下列字符。

<dl compact="compact"><dt>[ ]</dt><dd>范围描述符。[a-z]表示从a到z之间的任意一个。</dd><dt>\w</dt><dd>英文字母和数字。即[0-9 A-Z a-z]。</dd><dt>\W</dt><dd>非英文字母和数字</dd><dt>\s</dt><dd>空字符,即[\t\n\r\f]。</dd><dt>\S</dt><dd>非空字符。</dd><dt>\d</dt><dd>数字,即[0-9]。</dd><dt>\D</dt><dd>非数字。</dd><dt>\b</dt><dd>词边界字符(在范围描述符外部时)</dd><dt>\B</dt><dd>非词边界字符</dd><dt>\b</dt><dd>退格符(0x08)(在范围描述符内部时)</dd><dt>*</dt><dd>前面元素出现0次以上</dd><dt>+</dt><dd>前面元素出现1次以上</dd><dt>{m,n}</dt><dd>前面元素最少出现m次,最多出现n次</dd><dt>?</dt><dd>前面元素出现0次或1次</dd><dt>|</dt><dd>选择</dd><dt>( )</dt><dd>群组</dd><dt>其他字符</dt><dd>该字符本身</dd></dl></div>
</div>
常用正则式

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:<a href="http://%28/" target="_blank">http://(/</a>[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

 sql语句:^(select|drop|delete|create|update|insert).*$

 1、非负整数:^\d+$

 2、正整数:^[0-9]*[1-9][0-9]*$

 3、非正整数:^((-\d+)|(0+))$

 4、负整数:^-[0-9]*[1-9][0-9]*$

 5、整数:^-?\d+$

 6、非负浮点数:^\d+(\.\d+)?$

 7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

 8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$

 9、负浮点数:^(-((正浮点数正则式)))$

10、英文字符串:^[A-Za-z]+$

 11、英文大写串:^[A-Z]+$

 12、英文小写串:^[a-z]+$

 13、英文字符数字串:^[A-Za-z0-9]+$

 14、英数字加下划线串:^\w+$

 15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$

17、邮政编码:^[1-9]\d{5}$

 18、中文:^[\u0391-\uFFE5]+$

 19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

 20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$

 21、双字节字符(包括汉字在内):^\x00-\xff

 22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)

23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>

 24、匹配空行:\n[\s| ]*\r

 25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

 26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

 27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

 28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

 29、提取信息中的中国手机号码:(86)*0*13\d{9}

 30、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}

 31、提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}

 32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}

 33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+

 34、提取信息中的任何数字 :(-?\d*)(\.\d+)?

 35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)

 36、电话区号:/^0\d{2,3}$/

 37、腾讯QQ号:^[1-9]*[1-9][0-9]*$

 38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

 39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$

Share

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>