-
2018-11-15 21:10:55
之前遇到要用正则判断输入字符串的小需求中遇到了问题,连续的字符串不知道怎么判断。
如邮箱结尾的.com .cn .net等。于是乎查阅资料:
括号() : 括号是多个匹配,它把括号内的当做一组来处理,限制一些多选的范围,比如上面的需求只能是com cn net结尾的用括号就是最好的选择。
括号能提取字符串,如(com|cn|net)就可以限制,只能是com或cn或net。
括号将括号里面的内容作为一组,这就是与[]不同的地方。方括号[]: 方括号是单个匹配,如[abc]他限制的不是abc连续出现,而是只能是其中一个,这样写那么规则就是找到这个位置时只能是a或是b或是c;
方括号是正则表达式中最常用的,常用的用法有:[a-zA-Z0-9]匹配所有英文字母和数字,[^a-zA-Z0-9]匹配所有非英文字母和数字。大括号{}: 大括号的用法很简单,就是匹配次数,它需要和其他有意义的正则表达式一起使用。
比如[a-c]{2}意思就是匹配a-c之间的一个字母出现且只出现两次;
比如(com){1}意思就是com必须出现一次
比如\W{1,3}意思就是非字母数字最少出现一次最多出现3次。小结:正则表达式看起来很复杂但是学起来感觉一个顺序从左到右感觉又很容易,虽然正则表达式很容易懂,但是想要灵活应用却不容易。
---------------------
等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。
?,*,+,\d,\w 都是等价字符
?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,}
\d等价于[0-9]\D等价于[^0-9]
\w等价于[A-Za-z_0-9]\W等价于[^A-Za-z_0-9]。
常用运算符与表达式:
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
. 任何单个字符(\. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
, 分割
.
分割语法:
[A,H,T,W] 包含A或H或T或W字母
[a,h,t,w] 包含a或h或t或w字母
[0,3,6,8] 包含0或3或6或8数字
语法与释义:
基础语法 "^([]{})([]{})([]{})$"
正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"
?,*,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(?:)(?=)(?!)(?<=)(?<!)(?i)(*?)(+?)这种特殊组合情况下除外。
初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换
实例:
字符串;tel:086-0666-88810009999
原始正则:"^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}$"
速记理解:开始 "tel:普通文本"[0-9数字]{1至3位}"-普通文本"[0数字][0-9数字]{2至3位}"-普通文本"[0-9数字]{8至11位} 结束"
等价简写后正则写法:"^tel:\d{1,3}-[0]\d{2,3}-\d{8,11}$" ,简写语法不是所有语言都支持。更多相关内容 -
正则表达语法—来自LabviewHelp
2011-09-27 10:45:38正则表达语法—来自LabviewHelp正则表达语法—来自LabviewHelp -
正则表达式基本语法
2020-03-01 01:40:36一、核心作用: –文本的复杂处理 二、正则表达式的定义: 描述一个规则,通过这个规则可以匹配一类字符串...五、正则表达式语法: 正则表达式语法(1): 转义字符:‘ \n 换行符 \ 代表\本身 \t 制表符 ...一、核心作用:
–文本的复杂处理
二、正则表达式的定义:
描述一个规则,通过这个规则可以匹配一类字符串
三、正则表达式的优势和用途:
优势:强大而灵活的文本处理工具
用途:大部分编程语言、数据库、文本编辑器、开发环境均支持正则表达式四、测试工具:
RegexBuddy
五、正则表达式语法:
正则表达式语法(1):
转义字符:‘
\n 换行符 \ 代表\本身 \t 制表符 ^、+、? 代表这些字符本身 正则表达式语法(2):
标准字符集合
区分大小写,大写意思相反
\d 任意一个数字(0-9) \w 任意一个字母、数字、下划线(A-Z、a-z、0-9、_) \s 包括空格、制表符、换行符等空白字符中的任意一个(\t、\n、 ) . 小数点可以匹配任意一个字符(除换行符)如果要匹配包括换行符载内的所有字符,一般使用[\s\S] 正则表达式语法(3):
自定义字符集合
[] 方括号匹配方式,能够匹配方括号中任意一个字符 [1234] 匹配1或2或3或4 [^123] 匹配除1、2、3之外的任意字符 [1-3] 匹配1-3之间的任意一个字符 [^A-F0-3]] 匹配除A-F、0-3之外的任意一个字符 注:(1)正则表达式的特殊符号,被包含到中括号中,则失去了特殊意义,除了 ^和-之外
(2)标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将包含该集合正则表达式语法(4):
量词
修饰匹配次数的特殊符号
{n} 表达式重复n次 {m,n} 表达式至少重复m次,最多重复n次 {m,} 表达式至少重复m次 ? 匹配表达式0次或者一次,相当于{0,1} + 表达式至少出现一次,相当于{1,} * 表达式不出现或者出现任意次,相当于{0,} 匹配次数中的贪婪模式(匹配字符越多越好,默认) 匹配次数中的非贪婪模式(匹配字符越少越好,修饰匹配次数的特殊符号后加一个?修饰)
正则表达式语法(5):
字符边界
匹配的不是字符而是位置,符合某种条件的位置^ 与字符串开始的位置匹配 $ 与字符串结束的位置匹配 \b 匹配一个单词边界 \b匹配这样一个位置:前面的字符和后面的字符不全是\w
正则表达式语法(6):
选择符和分组
|分支结构 左右两边表达式“或”关系,匹配左边或右边 ()捕获组 (1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 (2)取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到 (3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的问题 (?:)非捕获组 一些表达式中,不得不使用(),但又不需要保存()中子表达式匹配的内容,这时可以用非捕获组来抵消使用()带来的副作用 反向引用(\nnn) 每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始编号 通过反向引用,可以对分组已捕获的字符串进行引用
正则表达式语法(7):
预搜索(零宽断言)
只进行子表达式的匹配,匹配内容不计入最终匹配结果,是零宽度
这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符,是位置绝对的
正则表达式匹配过程中,如果子表达式是占有字符的;如果子表达式匹配的仅仅是位置,那么就认为这个子表达式是占有字符的,如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。占有字符还说零宽度,是针对匹配的内容是否保存到最终匹配结果中而言的(?=exp) 断言自身出现的位置后面能匹配到exp (!=exp) 断言自身出现的位置后面不能匹配到exp (?<=exp) 断言自身出现的位置前面能匹配到exp (?<!exp) 断言自身出现的位置前面不能匹配到exp 六、正则表达式练习:
电话号码的验证:
要求:
- 电话号码由数字和"-"构成
- 电话号码为7到8位
- 如果电话号码中包含有区号,那么区号为三位或四位, 首位是0.
- 区号用"-"和其他部分隔开
- 移动电话号码为11位
- 11位移动电话号码的第一位和第二位为"13“,”15”,”18
0\d{2,3}-\d{7,8}|1[35789]+\d{9}
电子邮件地址验证 :
要求’’
- 用户名:字母、数字、中划线、下划线组成。
- @
- 网址:字母、数字组成。
- 小数点:.
- 组织域名:2-4位字母组成。 – 不区分大小
\w+@[a-zA-z0-9]+(.[A-Za-z]{2,4}){1,2}
七、常用的正则表达式:
感谢阅读,水平有限,如有错漏,还请不吝赐教
-
C#正则表达式语法大全
2012-12-26 11:04:58C#正则表达式语法大全 -
正则表达式语法规则
2021-08-04 20:26:04虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活,按照它的语法规则,根据需求构造出的正则表达式能够从原始文本中筛选出几乎任何你想要得到的字符组合。 Go语言通过 regexp 包为正则表达式提供了官方支持,...正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活,按照它的语法规则,根据需求构造出的正则表达式能够从原始文本中筛选出几乎任何你想要得到的字符组合。
Go语言通过 regexp 包为正则表达式提供了官方支持,其采用 RE2 语法,除了\c、\C外,Go语言和 Perl、Python 等语言的正则基本一致。
正则表达式语法规则
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")构成的文字序列,可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。下面的表格中列举了构成正则表达式的一些语法规则及其含义。
- 字符
-
数量词(用在字符或 (…) 之后)
-
边界匹配
-
逻辑、分组
- 特殊构造(不作为分组)
Regexp 包的使用
下面通过几个示例来演示一下 regexp 包的使用。【示例 1】匹配指定类型的字符串。
01.package main
02.
03.import (
04. “fmt”
05. “regexp”
06.)
07.
08.func main() {
09.
10. buf := “abc azc a7c aac 888 a9c tac”
11.
12. //解析正则表达式,如果成功返回解释器
13. reg1 := regexp.MustCompile(a.c
)
14. if reg1 == nil {
15. fmt.Println(“regexp err”)
16. return
17. }
18.
19. //根据规则提取关键信息
20. result1 := reg1.FindAllStringSubmatch(buf, -1)
21. fmt.Println("result1 = ", result1)
22.}运行结果如下:
result1 = [[abc] [azc] [a7c] [aac] [a9c]]
【示例 2】匹配 a 和 c 中间包含一个数字的字符串。01.package main
02.
03.import (
04. “fmt”
05. “regexp”
06.)
07.
08.func main() {
09.
10. buf := “abc azc a7c aac 888 a9c tac”
11.
12. //解析正则表达式,如果成功返回解释器
13. reg1 := regexp.MustCompile(a[0-9]c
)
14.
15. if reg1 == nil { //解释失败,返回nil
16. fmt.Println(“regexp err”)
17. return
18. }
19.
20. //根据规则提取关键信息
21. result1 := reg1.FindAllStringSubmatch(buf, -1)
22. fmt.Println("result1 = ", result1)
23.}运行结果如下:
result1 = [[a7c] [a9c]]
【示例 3】使用 \d 来匹配 a 和 c 中间包含一个数字的字符串。01.package main
02.
03.import (
04. “fmt”
05. “regexp”
06.)
07.
08.func main() {
09.
10. buf := “abc azc a7c aac 888 a9c tac”
11.
12. //解析正则表达式,如果成功返回解释器
13. reg1 := regexp.MustCompile(a\dc
)
14. if reg1 == nil { //解释失败,返回nil
15. fmt.Println(“regexp err”)
16. return
17. }
18.
19. //根据规则提取关键信息
20. result1 := reg1.FindAllStringSubmatch(buf, -1)
21. fmt.Println("result1 = ", result1)
22.}运行结果如下:
result1 = [[a7c] [a9c]]
【示例 4】匹配字符串中的小数。01.package main
02.
03.import (
04. “fmt”
05. “regexp”
06.)
07.
08.func main() {
09. buf := "43.14 567 agsdg 1.23 7. 8.9 1sdljgl 6.66 7.8 "
10.
11. //解释正则表达式
12. reg := regexp.MustCompile(\d+\.\d+
)
13. if reg == nil {
14. fmt.Println(“MustCompile err”)
15. return
16. }
17.
18. //提取关键信息
19. //result := reg.FindAllString(buf, -1)
20. result := reg.FindAllStringSubmatch(buf, -1)
21. fmt.Println("result = ", result)
22.}运行结果如下:
result = [[43.14] [1.23] [8.9] [6.66] [7.8]]
【示例 5】匹配 div 标签中的内容。01.package main
02.
03.import (
04. “fmt”
05. “regexp”
06.)
07.
08.func main() {
09. // 原生字符串
10. buf :=11. 12.<!DOCTYPE html> 13.<html lang="zh-CN"> 14.<head> 15. <title>C语言中文网 | Go语言入门教程</title> 16.</head> 17.<body> 18. <div>Go语言简介</div> 19. <div>Go语言基本语法 20. Go语言变量的声明 21. Go语言教程简明版 22. </div> 23. <div>Go语言容器</div> 24. <div>Go语言函数</div> 25.</body> 26.</html> 27.
28.
29. //解释正则表达式
30. reg := regexp.MustCompile(<div>(?s:(.*?))</div>
)
31. if reg == nil {
32. fmt.Println(“MustCompile err”)
33. return
34. }
35.
36. //提取关键信息
37. result := reg.FindAllStringSubmatch(buf, -1)
38.
39. //过滤<></>
40. for _, text := range result {
41. fmt.Println("text[1] = ", text[1])
42. }
43.}运行结果如下:
text[1] = Go语言简介
text[1] = Go语言基本语法
Go语言变量的声明
Go语言教程简明版text[1] = Go语言容器
text[1] = Go语言函数
【示例 6】通过 Compile 方法返回一个 Regexp 对象,实现匹配,查找,替换相关的功能。01.package main
02.import (
03. “fmt”
04. “regexp”
05. “strconv”
06.)
07.func main() {
08. //目标字符串
09. searchIn := “John: 2578.34 William: 4567.23 Steve: 5632.18”
10. pat := “[0-9]+.[0-9]+” //正则
11.
12. f := func(s string) string{
13. v, _ := strconv.ParseFloat(s, 32)
14. return strconv.FormatFloat(v * 2, ‘f’, 2, 32)
15. }
16. if ok, _ := regexp.Match(pat, []byte(searchIn)); ok {
17. fmt.Println(“Match Found!”)
18. }
19. re, _ := regexp.Compile(pat)
20. //将匹配到的部分替换为 “##.#”
21. str := re.ReplaceAllString(searchIn, “##.#”)
22. fmt.Println(str)
23. //参数为函数时
24. str2 := re.ReplaceAllStringFunc(searchIn, f)
25. fmt.Println(str2)
26.}输出结果:
Match Found!
John: ##.# William: ##.# Steve: ##.#
John: 5156.68 William: 9134.46 Steve: 11264.36
上面代码中 Compile 方法可以解析并返回一个正则表达式,如果成功返回,则说明该正则表达式正确可用于匹配文本。另外我们也可以使用 MustCompile 方法,它也可以像 Compile 方法一样检验正则的有效性,但是当正则不合法时程序将 panic。
-
正则表达式的语法
2021-02-01 11:58:06正则表达式语法简介 正则表达式是独立于任何语言的,虽然不同的 语言中其语法略有不同。 正则表达式的语法可以分为 • 特殊字符 • 边界匹配符 • 逻辑操作符 • 量词等 这些基本的语法规则合成使用,共同...正则表达式语法简介
正则表达式是独立于任何语言的,虽然不同的
语言中其语法略有不同。
正则表达式的语法可以分为
• 特殊字符
• 边界匹配符
• 逻辑操作符
• 量词等
这些基本的语法规则合成使用,共同构成了正
则表达式强大的表示和匹配功能
一般字符的语法在前一节已经介绍过(例如字符i)特殊字符的表达
例如,如果我们要查找一个字符串,这个字符
串中至少包含两行(两行可以不相邻),前面
一行中存在两个制表符,它们中间仅仅隔一数
字,后面一行中至少有一个制表符,则正则表
达式可以这样写:
• String regexString = “.\t\d\t.\n.\t.”
(其中的.表示任意多个非换行字符)
• 注意:正则表达式原文是“.\t\d\t.\n.\t.*” ,
双反斜杠中前一反斜杠是Java对反斜杠的转
义。边界匹配符
例如,如果我们要判断一个完整文本中是否存在完
整的一行"This is a complete line",且行中没有其它
任何字符,则可以如下的正则表达式:
• String regexString = “^This is a complete line$”
• 其中的 ^ 和 $ 界定了行的起始和终止,中间的
信息必须完整匹配才可以。逻辑操作符
例如,假设十六进制的表示字符是由数字和A-F这6个大写字母构成。我们知道一个字节可以用 2位的16进制表示,下面这个正则表达式要判断一个字节转换成十六进制之后的表示是不是正确:
• String regexString = “[0-9A-F][0-9A-F]”
字符串“ AE”, “30”, “6G”, “7E0”, “0A”匹配这个模式的结果分别是:T, T, F, F, T。其实这个需求还有更简单的实现方法,我们将在量词中介绍。量词
量词 描述了一个模式怎样吸收输入的文本:
贪婪型:量词是贪婪的,除非有别的设定。否则,贪婪型模式就要尽可能地发现更多的匹配。
勉强型:用问号指定。这个量词需要满足匹配的最少字符数。
占有型:目前,只有Java语言可用,属于Java特殊语法,主要用途是防止失配时回溯。在简单的正则表达式中很少使用。
例如,判断一个字节的十六进制表示是否正确可以用下面的正则表达式:
• String regexString = “[0-9A-F]{2}”
判断一个字符串表示的数值是不是一个(0, 1亿)
之间的整数,可用:
• String regexString = “[1-9]//d{0,7}” -
正则表达式语法.pdf
2019-05-27 21:36:54对正则表达式的语法规则进行了总结整理,并制作成了一个PDF文档,便于查阅。 -
正则表达式,正则表达式语法大全
2021-05-17 15:20:34正则表达式,正则表达式语法大全正则表达式分为两类:基本正则表达式:BRE扩展正则表达式:ERE基本正则表达式的元字符:字符匹配:.: 匹配任意单个字符;[]: 匹配指定范围内的任意单个字符[^]:匹配指定范围外的... -
正则表达式基础语法大全
2019-05-29 22:38:39正则表达式基础语法 1.普通字符: 字母、数字、汉子、下划线、以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 2.简单的转义字符: 3.... -
正则表达式基本语法以及详解
2020-05-04 20:32:42JS正则表达式实用总结 一、什么是正则表达式 正则表达式是由一个字符序列形成的搜索模式,搜索模式可用于文本搜索和文本替换。 二、创建正则表达式 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量。 ... -
正则表达值
2021-01-07 02:56:02正则表达式 正则表达式是比较重要知识,它可以让你在众多数据中找到你想...正则表达式的语法在几乎所有编程都是通用的,除了中间几个别的函数是某种语言特有的。 这一块其实是比较容易理解的,下面先看一个例子 #c -
c#正则表达式语法
2014-05-05 17:19:30作者将自己在学习正则表达式中的心得和笔记作了个总结性文章,希望对初学C#正则表达式的读者有帮助。 [内容] 什么是正则表达式 涉及的基本的类 正则表达式基础知识 构建表达式基本方法 编写一个检验程序 ... -
正则表达解析 Markdown 语法
2019-03-07 07:16:06在首页列表需要对文字进行截取,需要截取第一张Markdown 语法的图片url。 在文章详情页以及关于文章展示的页面。需要对文章内容进行截取。填充headdescription。利于seo优化 Markdown 是一种可以使用普通文本编辑器... -
正则表达式语法(入门与实例)
2012-08-15 18:03:53正则表达式语法(入门与实例) -
正则表达式语法和常用表达式列表
2020-12-11 10:13:41学习正则表达式很大程度上就是学习正则表达式的语法规则。 开发中如何使用? 开发中使用正则表达式的流程: 分折所要匹配的数据,写出测试用的典型数据 在工具软件中进行匹配测试 在程序中调用通过测... -
正则表达式语法结构分析及难点介绍
2019-04-05 09:25:31正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则... -
正则表达式简单语法及常用正则表达式
2018-04-17 14:39:59匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式: http://(/ [\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? sql语句:^(select|drop|delete|create|update|insert).*$ 1、... -
Notepad++的正则表达式语法
2017-09-20 09:28:34Notepad++的正则表达式语法 本文实例讲述了 Notepad++的正则表达式语法,分享给大家,供大家参考。具体分析如下: \ 转义字符 如:要使用 “\” 本身, 则应该使用“\\” \t Tab制表符 注:扩展和... -
JAVA正则表达式语法大全
2016-05-05 09:42:511 [正则表达式]文本框输入内容控制 2 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 3 只能输入数字:"^[0-9]*$"。 4 只能输入n位的数字:"^\d{n}$"。 5 只能输入至少n位的数字:"^\d{n,}$"。 6 只能输入m~n位的... -
正则表达式解析器的编写
2021-09-12 13:30:29首先对正则表达式、有限自动机、非确定性有限状态自动机、确定性有限状态自动机、汤普森构造法、汤普森提出的正则表达式搜索算法进行介绍,然后基于该算法,实现了一个正则表达式解析器 -
js正则表达式 非中文_js正则表达式匹配中文_js正则表达式语法
2021-06-13 12:43:38腾讯云活动聚集了最新的...因为对js中的正则不太了解,可以参考一下js 中正则表达式必知必会1. 字符串操作消除字符串两边的括号 trimstring.prototype.trim = function(){ return this.replace((^s+)|(s+$)g, )}h... -
正则表达详解
2020-04-15 13:47:13可以使用事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑。 正则表达式是一种小型的、高度专业化的编程语言,(在Python中)它... -
史上最全正则表达式语法,文末附常用表达式!
2019-10-28 09:03:25元字符是构造正则表达式的一种基本元素。 . :匹配除换行符以外的任意字符 w:匹配字母或数字或下划线或汉字 s:匹配任意的空白符 d:匹配数字 b:匹配单词的开始或结束 ^:匹配字符串的开始 $:匹配字符串的... -
MYSQL使用正则表达式过滤数据
2020-12-15 11:36:08一、正则与LIKE的区别 Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。 例如:select * from wp_posts where post_name REGEXP’hello’,可以检索出列post_name中所有包含hello的行 ... -
常用的php正则表达及语法注解总结
2021-04-20 15:44:16下面是常用的php正则表达及语法注解总结,让我们一起来看看常用的php正则表达及语法注解总结的具体内容吧!基本语法界定符:标识一个正则表达式的开始和结束,用'/'或'#'或'{ }',因为语法'{ }... -
vscode正则表达式
2018-09-20 11:39:28参考官网地址 匹配所有()中的内容\(.*?\) -
shell正则表达式语法介绍
2014-05-27 16:27:41简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象... -
hive正则表达清洗
2021-03-04 17:42:39regexp_replace(trim(e.cat_id),"[@^…?-`’"",*./ \,❌✘⏰。〞ヽ :\]”、\[ +]",’’) splid的用法: 语法:split(str string, regex string) -- 使用 regex 分割字符串 str 返回值是一个数组。连接