正则表达式

合集下载

什么是正则表达式?

什么是正则表达式?

什么是正则表达式?
什么是正则表达式?
正则表达式也称模式表达式,其⾃⾝具有⼀套⾮常完整的、可以编写模式的语法体系,提供了⼀种灵活且直观的字符串处理⽅法。

正则表达式通过构建特定规则的模式,与输⼊的字符串信息⽐较,从⽽实现字符串的匹配、查找、替换及分割等操作。

正则表达式并不是PHP⾃⼰的产物,在很多领域都会见到它的应⽤,除了在perl、C#及Java语⾔中应⽤外,我们的B/S架构软件开发
中,Linux操作系统、前台JavaScript脚本、后台脚本PHP以及MySQL数据库中都可以应⽤到正则表达式。

正则表达式语法概述
正则表达式是⼀种描述字符串结构的语法规则,是⼀个特定的格式化模式,可以匹配、替换、截取匹配的字串。

对于⽤户来说,可能以前接触过DOS,如果相匹配当前⽂件夹下所有的⽂本⽂件,可以输⼊“dir *.txt”命令,按enter键后所有“.txt”⽂件都会被列出来。

这⾥的“*.txt”即可理解为⼀个简单的正则表达式。

PHP⽀持两种风格的正则表达式语法:POSIX和Perl。

这两种风格的正则表达式是PHP编译时的默认风格。

在PHP5.3版本中,Perl风格不能被禁⽤。

POSIX正则表达式更容易掌握,但是他们不是⼆进制安全的。

何时⽤到正则表达式?
到⽬前为⽌,我们进⾏的所有模式匹配都使⽤了字符串函数。

我们只限于进⾏精确匹配,或精确的⼦字符串匹配。

如果希望完成⼀些更负责的模式匹配,应该⽤正则表达式。

正则表达式在开始学习时很难掌握,但是却⾮常有⽤。

常用的正则表达式

常用的正则表达式

常用的正则表达式整理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-\xff22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>24、匹配空行:\n[\s| ]*\r25、提取信息中的网络链接:(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}$匹配中文字符的正则表达式:[\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S *)?$匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$下表是元字符及其在正则表达式上下文中的行为的一个完整列表:\将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

正则表达式 $用法

正则表达式 $用法

正则表达式 $用法
(原创版)
目录
1.正则表达式简介
2.$用法概述
3.$用法实例分析
4.$用法总结
正文
1.正则表达式简介
正则表达式(Regular Expression,简称 regex)是一种强大的文本处理工具,可以用来检查文本是否符合某种模式、提取文本中的特定信息等。

正则表达式广泛应用于计算机科学和编程领域,例如文本编辑器、搜索引擎、数据验证等场景。

2.$用法概述
在正则表达式中,$符号表示字符串的结尾。

$用法主要用于匹配字符串的最后一个字符或者表示字符串以某个字符结尾。

当需要在正则表达式中使用$时,需要在$符号前加上反斜杠()进行转义,以免被解释为特殊符号。

3.$用法实例分析
举例来说,如果我们想要匹配所有以字母 a 结尾的单词,可以使用以下正则表达式:
```
b[a-zA-Z]*[a-zA-Z]$b
```
这个正则表达式的意思是:
- `b`表示单词边界,用于匹配单词;
- `[a-zA-Z]`表示任意一个大写或小写字母;
- `*`表示前面的字符(字母)可以出现任意次;
- `[a-zA-Z]`表示最后一个字符必须是字母;
- `b`表示单词边界,用于匹配单词结尾。

这样,我们就可以匹配到所有以字母 a 结尾的单词,如"apple"、"banana"等。

4.$用法总结
$用法在正则表达式中起到了关键的作用,它可以帮助我们精确地匹配字符串的结尾。

在实际应用中,我们可以灵活运用$用法来处理各种文本问题。

正则表达式150种表达方式

正则表达式150种表达方式

正则表达式150种表达方式1、删除所有数字。

只要查找:\d就OK。

为了不留空行:替换处:\d2、删除所有英文字母。

只要查找:\a就OK。

为了不留空行:替换处:\d3、删除除换行符以外的所有。

只要查找:. 为了不留空行:替换处:\d4、既删除英文字母又删除数字。

只要查找:\w。

为了不留空行:替换处:\d5、删除数字加字母加等于(如:3a=或3zz=)只要查找:\d+\a+\=。

为了不留空行:替换处:\d6、删除换行。

只要查找:$。

替换处:\d(还原查找:\a+=\f。

替换:\0\n)。

如在换行后加一空格,查找:(\a)$。

替换:\0 \d。

7、删除空行只要查找:^$。

为了不留空行:替换处:\d8、删除首尾空格。

只要查找:^\s*|\s*$就OK9、删除行前数字及顿号。

只要查找:\d+、替换为空10、删除末尾标点符号。

只要查找:\P+$|\P+\s+$,“|”前面是没有空格的,“|”后面有空格,P后的加是为了……而用的。

11、删除末尾空格。

只要查找:\s+$。

替换为空。

12、删除第一个字如:“的我们”中的“的”只要查找:^\的。

13、删除第几个字。

查找:查找:^().(.+)。

替换:\1\2。

去掉前面的拼音:查找:^\a+替换为空。

第一个括号里可加“.”且可变。

14、删含的。

查:.*的.*替:\d。

的头查:.*=的.*替:\d。

的尾查:\a.*\c.*的$替:\d(留它不匹配)●删非的行查:^[^的]+$替:\d15、删除几码以上的码查:^(...)...替:\1。

删第几位码。

查:^(...).(.+)替:\1\2(变成\1,\2则其位则改成,了)首括号的.可变。

16、删除各类型的几字词,但必须是码前词后或纯词。

三字词:查找:^\~f{}\f{3}$替换:\d。

替换:\d “3”可以改。

17、删除11字词及其以上的词条查找(自定义格式):\a{}\=(\c|\P|\p){11,}。

替换:\d。

11可改。

正则表达式公式大全

正则表达式公式大全

正则表达式公式大全正则表达式是一种处理字符串的强大工具,它可以帮助我们快速、高效地匹配、替换、删除、提取字符串。

很多编程语言,包括Python、Java、JavaScript等都支持正则表达式,所以掌握正则表达式是非常重要的。

下面是一些常用的正则表达式公式:1. 匹配单个字符:(1).点号(.)表示匹配任何单个字符,除了换行符。

(2)\d表示数字,等价于[0-9]。

(3)\D表示非数字,等价于[^0-9]。

(4)\w表示字符,包括数字、字母和下划线,等价于[a-zA-Z0-9_]。

(5)\W表示非字符,等价于[^a-zA-Z0-9_]。

(6)\s表示空白字符,包括空格、制表符、换行符等。

(7)\S表示非空白字符。

2. 匹配重复字符:(1)*表示重复0次或更多次。

(2)+表示重复1次或更多次。

(3)?表示重复0次或1次。

(4){n}表示重复n次。

(5){n,}表示重复n次或更多次。

(6){n,m}表示重复n到m次。

3. 匹配位置:(1)^表示匹配开头位置。

(2)$表示匹配结尾位置。

(3)\b表示匹配单词边界。

(4)\B表示匹配非单词边界。

4. 匹配分组:(1)( )表示一个分组。

(2)\1、\2、\3等表示对之前的分组的引用。

(3)(?: )表示一个非捕获分组。

5. 匹配字符集:(1)[ ]表示一个字符集,例如[abc]表示匹配a、b、c中的任意一个字符。

(2)[^ ]表示一个否定字符集,例如[^abc]表示匹配除了a、b、c以外的任意一个字符。

(3)[a-z]表示一个范围,表示匹配a至z中的任意一个字母。

6. 匹配转义字符:(1)\表示转义字符,例如\\.表示匹配点号。

(2)\n表示匹配换行符。

(3)\r表示匹配回车符。

(4)\t表示匹配制表符。

(5)\xx表示匹配十六进制字符。

以上是一些常用的正则表达式公式,如果我们能够熟练掌握这些公式,就可以很好地应用正则表达式来处理字符串。

当然,对于不同编程语言来说,对于正则表达式的支持也会有所不同,所以需要我们在实际应用中注意区别。

常用正则式

常用正则式
60. (pattern) 匹配pattern 并获取这一匹配。
61.
62. (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
63.
64. (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
119.
120. 匹配双字节字符(包括汉字在内):[^x00-xff]
121.
122. 匹配空行的正则表达式:n[s| ]*r
123.
124. 匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
125.
126. 匹配首尾空格的正则表达式:(^s*)|(s*$)
75.
76. [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
77.
78. \b 匹配一个单词边界,也就是指单词和空格间的位置。
79.
80. \B 匹配非单词边界。
81.
82. \cx 匹配由x指明的控制字符。
83.
36.
37. 元字符及其在正则表达式上下文中的行为:
38.
39. \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
40.
41. ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
91.
92. \r 匹配一个回车符。等价于 \x0d 和 \cM。

正则表达式

正则表达式

正则表达式(I)正则表达式是由英文词语regular expression翻译过来的,就是符合某种规则的表达式。

正则表达式在软件开发中应用非常广泛,例如,找出网页中的超链接,找出网页中的email 地址,找出网页中的手机号码,判断输入的内容是否全部是数字,是否满足某种日期格式等等。

可以将正则表达式理解为一种对文字进行模糊匹配的语言,它用一些特殊的符号(称为元字符)来代表具有某种特征的一组字符以及该组字符重复出现的次数。

例如,对于正则表达式“\d{5}(-\d{4})?”,\d就是一个元字符,它表示一个数字字,{5}表示紧靠它前面的元素项连续重复5次,\d和{5}的组合\d{5}就表示匹配任意连续的5个数字字符;-\d{4}匹配的是一个连字号(-)后加上4个任意的数字,(-\d{4})?表示连字号(-)和后面的4个数字可有可无。

对于整个正则表达式“\d{5}(-\d{4})?”,表示要么是5个连续的数字字符,要么是5个连续的数字后加上一个连字号(-)、再加上4个连续的数字组成的10个字符。

正则表达式中的圆括号除了能将多个元素组合成一个可统一操作的组合项外,它所括起来的表达式部分还成为了一个子匹配(也叫子表达式),也就是说,我们可以用圆括号在一个长的正则表达式中划分出子表达式。

这样,除了可以得到整个正则表达式的匹配结果外,还可以单独得到每个子表达式部分所匹配的结果。

要灵活运用正则表达式,必须了解其中各种元字符的功能。

元字符从功能上大致分为:限定符、选择匹配符、分组组合和反向引用符、特殊字符、字符匹配符、定位符。

限定符用于指定其前面的字符或组合项连续出现多少次,下面是各种限定符及其含义:●{n} 规定前面的元素或组合项的连续出现n 次●{n,} 规定前面的元素或组合项至少连续出现n 次●{n,m } 规定前面的元素或组合项至少连续出现n 次,至多连续出现m 次●+ 规定前面的元素或组合项必须出现一次或连续多次,等效于{1,}●* 规定前面的元素或组合项可以出现零次或连续多次,等效于{0,}●? 规定前面的元素或组合项出现零次或一次,等效于{0,1}默认情况下,正则表达式使用最长(也叫贪婪)匹配原则。

20个常用的正则表达式 单字母

20个常用的正则表达式 单字母

正则表达式(Regular Expression)是一种用于匹配字符串的强大工具。

它通过使用特定的符号和字符来描述和匹配一系列字符串,能够满足我们在处理文本时的各种需求。

在这篇文章中,我们将深入探讨20个常用的单字母正则表达式,并通过实例来展示它们的使用方法。

1. \b在正则表达式中,\b表示单词的边界。

它可以用来匹配单词的开头或结尾,用于查找特定单词而不是单词的一部分。

2. \d\d表示任意一个数字字符。

它可以用来匹配任何数字,例如\d+可以匹配一个或多个数字字符。

3. \w\w表示任意一个字母、数字或下划线字符。

它可以用来匹配单词字符,例如\w+可以匹配一个或多个单词字符。

4. \s\s表示任意一个空白字符,包括空格、制表符、换行符等。

它可以用来匹配空白字符,例如\s+可以匹配一个或多个空白字符。

5. \.\.表示匹配任意一个字符,包括标点符号和空格等。

它可以用来匹配任意字符,例如\.可以匹配任意一个字符。

6. \A\A表示匹配字符串的开始。

它可以用来确保匹配发生在字符串的开头。

7. \Z\Z表示匹配字符串的结束。

它可以用来确保匹配发生在字符串的结尾。

8. \b\b表示单词的边界。

它可以用来匹配单词的开头或结尾,用于查找特定单词而不是单词的一部分。

9. \D\D表示任意一个非数字字符。

它可以用来匹配任何非数字字符。

10. \W\W表示任意一个非单词字符。

它可以用来匹配任何非单词字符。

11. \S\S表示任意一个非空白字符。

它可以用来匹配任何非空白字符。

12. \[\[表示匹配方括号。

它可以用来匹配包含在方括号内的字符。

13. \]\]表示匹配方括号。

它可以用来匹配包含在方括号内的字符。

14. \(\(表示匹配左括号。

它可以用来匹配包含在左括号内的字符。

15. \)\)表示匹配右括号。

它可以用来匹配包含在右括号内的字符。

16. \{\{表示匹配左花括号。

它可以用来匹配包含在左花括号内的字符。

17. \}\}表示匹配右花括号。

正则表达式实用语法大全

正则表达式实用语法大全

正则表达式基本符号:^ 表示匹配字符串的开始位置 (例外用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)$ 表示匹配字符串的结束位置* 表示匹配零次到多次+ 表示匹配一次到多次 (至少有一次)表示匹配零次或一次. 表示匹配单个字符| 表示为或者,两项中取一项( ) 小括号表示匹配括号中全部字符[ ] 中括号表示匹配括号中一个字符范围描述如[0-9 a-z A-Z]{ } 大括号用于限定匹配次数如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符{n,m}表示至少n,最多m\ 转义字符如上基本符号匹配都需要转义字符如 \* 表示匹配*号\w 表示英文字母和数字 \W 非字母和数字\d 表示数字 \D 非数字常用的正则表达式匹配中文字符的正则表达式: [\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的正则表达式:http://(/[\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、电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$20、手机号码:^((\d2,3)|(\d{3}\-))?13\d{9}$21、双字节字符(包括汉字在内):^\x00-\xff22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)23、匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>24、匹配空行:\n[\s| ]*\r25、提取信息中的网络链接:(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、提取信息中的中国固定电话号码:(\d3,4|\d{3,4}-|\s)?\d{8}31、提取信息中的中国电话号码(包括移动和固定电话):(\d3,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]+$。

pattern 正则表达式大全

pattern 正则表达式大全

正则表达式是一种强大的文本匹配和处理工具,它可以在文本中进行复杂的匹配和替换操作。

无论是在编程语言中还是在各种文本处理工具中,正则表达式都扮演着重要的角色。

本文将为您详细介绍正则表达式的相关知识,包括基本语法、元字符、量词、分组、反向引用、预搜索等内容,帮助您深入了解和掌握正则表达式的用法和技巧。

一、正则表达式基础知识1.1 正则表达式概述正则表达式是一种用来描述、匹配一系列符合某个句法规则的字符串的表达式。

通过使用正则表达式,我们可以轻松地在文本中查找、替换符合特定模式的字符串,实现文本的快速处理和处理。

1.2 基本语法正则表达式的基本语法包括普通字符和特殊字符。

普通字符就是匹配其自身的字符,比如字母、数字、标点符号等;特殊字符则具有特殊的含义,比如"."匹配任意一个字符,"^"匹配字符串的开头,"$"匹配字符串的结尾等。

1.3 元字符元字符是正则表达式中具有特殊含义的字符,比如"."、"^"、"$"等。

通过使用元字符,我们可以实现更精确的匹配和替换操作。

二、正则表达式进阶技巧2.1 量词正则表达式中的量词用来指定匹配字符的数量,比如"*"表示零个或多个,"+"表示一个或多个,"?"表示零个或一个等。

通过使用量词,我们可以对文本中特定模式的字符串进行更精确的匹配。

2.2 分组正则表达式中的分组用来将多个字符组合成一个整体进行匹配,比如"(abc)"表示匹配"abc"这个字符串。

通过使用分组,我们可以更灵活地进行匹配和替换操作。

2.3 反向引用正则表达式中的反向引用用来引用前面匹配到的分组,比如"\1"表示引用第一个分组所匹配到的内容。

通过使用反向引用,我们可以实现一些复杂的匹配和替换操作。

正则表达式知识详解

正则表达式知识详解

正则表达式知识详解⼀、什么是正则表达式?1.定义:正则表达式(regular expression)描述了⼀种字符串匹配的模式,可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串做替换或者从某个串中取出符合某个条件的⼦串等。

构造正则表达式的⽅法和创建数学表达式的⽅法⼀样。

也就是⽤多种元字符与运算符可以将⼩的表达式结合在⼀起来创建更⼤的表达式。

正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

2.组成:正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的⽂字模式。

模式描述在搜索⽂本时要匹配的⼀个或多个字符串。

正则表达式作为⼀个模板,将某个字符模式与所搜索的字符串进⾏匹配。

3.何时使⽤:验证——从头到尾完整匹配!查找——只要部分匹配即可!⼆、正则表达式的基本语法和规则1.备选字符集:规定某*⼀位字符*可⽤的备选字符的集合语法:[可选字符列表]强调:1. ⽆论备选字符集包含多少字符,只能选1个2. 必须选1个!⽐如:6位数字的密码[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]简化:1. 当备选字符连续时,可⽤-表⽰范围的区间⽐如:[0123456789]-->[0-9][0-9][0-9][0-9][0-9][0-9][0-9][a-z]-->1位⼩写字母[A-Z]-->1位⼤写字母[A-Za-z]-->1位字母,⼤⼩写都⾏[0-9a-zA-Z]-->1位字母或数字都⾏反选:[^不能选的字符列表]⽐如:[^47] 强调:^作“除了”使⽤时,只能放在开头2. 预定义字符集:为常⽤的字符集专门提供的简化写法!“\d”-->[0-9]-->1位数字“\w”-->[0-9a-zA-Z_]-->1位字母,数字或_“\s”-->1位空字符:匹配任何空⽩字符,包括空格、制表符、换页符等等。

《正则表达式》课件

《正则表达式》课件

THANKS
感谢观看
后查
后查概述
后查是在匹配之后进行的条件判断,用于确定是否满 足某些特定条件。
后视断言
(?<=...) 用于匹配前面紧挨着特定字符或字符串的文 本。
后顾断言
(?<!...) 用于匹配前面不跟随特定字符或字符串的文本 。
非捕获组
非捕获组概述
01
非捕获组是一种特殊类型的组,用于将多个字符组合成一个整
体,但不捕获匹配的文本。
《正则表达式》PPT课件
CATALOGUE
目 录
• 正则表达式简介 • 正则表达式基础 • 正则表达式进阶 • 正则表达式应用实例 • 正则表达式的局限性与未来发展 • 总结与回顾
01
CATALOGUE
正则表达式简介
什么是正则表达式
总结词
正则表达式是一种用于匹配字符串中特定模式的工具。
详细描述
02
CATALOGUE
正则表达式基础
元字符
01
匹配任何字符:`.`
02
匹配换行符:`n`
03
匹配单词边界:`b`
04
匹配开始和结束位置:`^`和`$`
字符类
01 02 03 04
匹配单个字符:`[a]` 匹配字符范围:`[a-z]`
排除字符:`[^a]` 预定义字符类:`d`(数字)、`w`(单词字符)、`s`(空白字符)
正则表达式的历史与发展
要点一
总结词
正则表达式起源于20世纪50年代,随着计算机技术的发展 而不断完善。
要点二
详细描述
正则表达式起源于20世纪50年代,最早由数学家阿兰·图灵 提出。随着计算机技术的发展,正则表达式逐渐成为文本 处理领域的标准工具。在实践中,正则表达式的语法和规 则不断得到完善和扩展,以适应更广泛的应用场景和需求 。如今,正则表达式已经成为许多编程语言的标准库之一 ,被广泛应用于各种文本处理任务中。

常用正则表达式

常用正则表达式
(三)
Email : /^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/
isEmail1 : /^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/;
isEmail2 : /^.*@[^_]*$/;
Phone : /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip=”10.100.20.168″ip=ip.split(“.”)alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))”

正则表达式

正则表达式

"^\d+$" //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$" //正整数"^((-\d+)|(0+))$" //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$" //负整数"^-?\d+$" //整数"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[ 1-9][0-9]*)))$" //负浮点数"^(-?\d+)(\.\d+)?$" //浮点数"^[A-Za-z]+$" //由26个英文字母组成的字符串"^[A-Z]+$" //由26个英文字母的大写组成的字符串"^[a-z]+$" //由26个英文字母的小写组成的字符串"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串"^\w+$" //由数字、26个英文字母或者下划线组成的字符串"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z ]{2,4}|[0-9]{1,3})(]?)$" //Emil/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9] +)?$/ //电话号码"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1 dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$元字符及其在正则表达式上下文中的行为:\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

最全的常用正则表达式大全

最全的常用正则表达式大全

最全的常⽤正则表达式⼤全⼀、校验数字的表达式1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 ⾄少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和⾮零开头的数字:^(0|[1-9][0-9]*)$6 ⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位⼩数的正数或负数:^(\-)?\d+(\.\d{1,2})?$8 正数、负数、和⼩数:^(\-|\+)?\d+(\.\d+)?$9 有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$10 有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$11 ⾮零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$12 ⾮零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$13 ⾮负整数:^\d+$ 或 ^[1-9]\d*|0$14 ⾮正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$15 ⾮负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$16 ⾮正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$⼆、校验字符的表达式1 汉字:^[\u4e00-\u9fa5]{0,}$2 英⽂和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$3 长度为3-20的所有字符:^.{3,20}$4 由26个英⽂字母组成的字符串:^[A-Za-z]+$5 由26个⼤写英⽂字母组成的字符串:^[A-Z]+$6 由26个⼩写英⽂字母组成的字符串:^[a-z]+$7 由数字和26个英⽂字母组成的字符串:^[A-Za-z0-9]+$8 由数字、26个英⽂字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$9 中⽂、英⽂、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$10 中⽂、英⽂、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$11 可以输⼊含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+12 禁⽌输⼊含有~的字符:[^~\x22]+三、特殊需求表达式1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$4 ⼿机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$6 国内电话号码(0511-*******、021-********):\d{3}-\d{8}|\d{4}-\d{7}7 ⾝份证号(15位、18位数字):^\d{15}|\d{18}$8 短⾝份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$11 强密码(必须包含⼤⼩写字母和数字的组合,不能使⽤特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$12 ⽇期格式:^\d{4}-\d{1,2}-\d{1,2}13 ⼀年的12个⽉(01~09和1~12):^(0?[1-9]|1[0-2])$14 ⼀个⽉的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$15 钱的输⼊格式:16 1.有四种钱的表⽰形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$17 2.这表⽰任意⼀个不以0开头的数字,但是,这也意味着⼀个字符"0"不通过,所以我们采⽤下⾯的形式:^(0|[1-9][0-9]*)$18 3.⼀个0或者⼀个不以0开头的数字.我们还可以允许开头有⼀个负号:^(0|-?[1-9][0-9]*)$19 4.这表⽰⼀个0或者⼀个可能为负的开头不为0的数字.让⽤户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下⾯我们要加的是说明可能的⼩数部分:^[0-9]+(.[0-9]+)?$20 5.必须说明的是,⼩数点后⾯⾄少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$21 6.这样我们规定⼩数点后⾯必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$22 7.这样就允许⽤户只写⼀位⼩数.下⾯我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$23 8.1到3个数字,后⾯跟着任意个逗号+3个数字,逗号成为可选,⽽不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$24 备注:这就是最终结果了,别忘了"+"可以⽤"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在⽤函数时去掉去掉那个反斜杠,⼀般的错误都在这⾥25 xml⽂件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$26 中⽂字符的正则表达式:[\u4e00-\u9fa5]27 双字节字符:[^\x00-\xff] (包括汉字在内,可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1))28 空⽩⾏的正则表达式:\n\s*\r (可以⽤来删除空⽩⾏)29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (⽹上流传的版本太糟糕,上⾯这个也仅仅能部分,对于复杂的嵌套标记依旧⽆能为⼒)30 ⾸尾空⽩字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式)31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字) 33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有⽤) 34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))20个正则表达式必知(能让你少写1,000⾏代码)正则表达式(regular expression)描述了⼀种字符串匹配的模式,可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串做替换或者从某个串中取出符合某个条件的⼦串等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.Python正则式的基本用法1.1基本规则1.2重复1.2.1最小匹配与精确匹配1.3前向界定与后向界定1.4组的基本知识2.re模块的基本函数2.1使用compile加速2.2 match和search2.3 finditer2.4 字符串的修改与替换3.更深入的了解re的组与对象3.1编译后的Pattern对象3.2 组与Match对象3.2.1组的名字与序号3.2.2 Match对象的方法4.更多的资料初学Python,对Python的文字处理能力有很深的印象,除了str对象自带的一些方法外,就是正则表达式这个强大的模块了。

但是对于初学者来说,要用好这个功能还是有点难度,我花了好长时间才摸出了点门道。

由于我记性不好,很容易就忘事,所以还是写下来比较好一些,同时也可以加深印象,整理思路。

由于我是初学,所以肯定会有些错误,还望高手不吝赐教,指出我的错误。

1 Python正则式的基本用法Python的正则表达式的模块是…re‟,它的基本语法规则就是指定一个字符序列,比如你要在一个字符串s=‟123abc456‟中查找字符串‟abc‟,只要这样写:>>> import re>>> s='123abc456eabc789'>>>re.findall(r‟abc‟,s)结果就是:['abc', 'abc']这里用到的函数”findall(rule , target [,flag] )”是个比较直观的函数,就是在目标字符串中查找符合规则的字符串。

第一个参数是规则,第二个参数是目标字符串,后面还可以跟一个规则选项(选项功能将在compile函数的说明中详细说明)。

返回结果结果是一个列表,中间存放的是符合规则的字符串。

如果没有符合规则的字符串被找到,就返回一个空列表。

为什么要用r’ ..‘字符串(raw字符串)?由于正则式的规则也是由一个字符串定义的,而在正则式中大量使用转义字符’/’,如果不用raw字符串,则在需要写一个’/’的地方,你必须得写成’//’,那么在要从目标字符串中匹配一个’/’的时候,你就得写上4个’/’成为’////’!这当然很麻烦,也不直观,所以一般都使用r’’来定义规则字符串。

当然,某些情况下,可能不用raw字符串比较好。

以上是个最简单的例子。

当然实际中这么简单的用法几乎没有意义。

为了实现复杂的规则查找,re规定了若干语法规则。

它们分为这么几类:功能字符:….‟ …*‟ …+‟ …|‟ …?‟ …^‟ …$‟ …/‟等,它们有特殊的功能含义。

特别是‟/‟字符,它是转义引导符号,跟在它后面的字符一般有特殊的含义。

规则分界符:…[… …]‟ …(‟ …)‟ …{… …}‟等,也就是几种括号了。

预定义转义字符集:“/d”“/w” “/s”等等,它们是以字符‟/‟开头,后面接一个特定字符的形式,用来指示一个预定义好的含义。

其它特殊功能字符:‟#‟ …!‟ …:‟ …-…等,它们只在特定的情况下表示特殊的含义,比如(?# …)就表示一个注释,里面的内容会被忽略。

下面来一个一个的说明这些规则的含义,不过说明的顺序并不是按照上面的顺序来的,而是我认为由浅入深,由基本到复杂的顺序来编排的。

同时为了直观,在说明的过程中尽量多举些例子以方便理解。

1.1 基本规则‘[‘‘]’字符集合设定符首先说明一下字符集合设定的方法。

由一对方括号括起来的字符,表明一个字符集合,能够匹配包含在其中的任意一个字符。

比如 [abc123],表明字符‟a‟ …b‟ …c‟ …1‟ …2‟ …3‟都符合它的要求。

可以被匹配。

在‟[… …]‟中还可以通过‟-…减号来指定一个字符集合的范围,比如可以用[a-zA-Z]来指定所以英文字母的大小写,因为英文字母是按照从小到大的顺序来排的。

你不可以把大小的顺序颠倒了,比如写成[z-a]就不对了。

如果在‟[… …]‟里面的开头写一个…^‟号,则表示取非,即在括号里的字符都不匹配。

如[^a-zA-Z]表明不匹配所有英文字母。

但是如果…^‟不在开头,则它就不再是表示取非,而表示其本身,如[a-z^A-Z]表明匹配所有的英文字母和字符‟^‟。

‘|’或规则将两个规则并列起来,以‘|’连接,表示只要满足其中之一就可以匹配。

比如[a-zA-Z]|[0-9] 表示满足数字或字母就可以匹配,这个规则等价于 [a-zA-Z0-9]注意:关于‟|‟要注意两点:第一,它在‟[… …]‟之中不再表示或,而表示他本身的字符。

如果要在‟[… …]‟外面表示一个‟|‟字符,必须用反斜杠引导,即‟/|‟ ;第二,它的有效范围是它两边的整条规则,比如‘dog|cat‟匹配的是‘dog‟和‟cat‟,而不是‟g‟和‟c‟。

如果想限定它的有效范围,必需使用一个无捕获组…(?: )‟包起来。

比如要匹配‘I have a dog‟或‟I have a cat‟,需要写成r‟I have a (?:dog|cat)‟,而不能写成r‟I have a dog|cat‟例>>> s = …I have a dog , I have a cat‟>>>re.findall( r‟I have a (?:dog|cat)‟ , s )['I have a dog', 'I have a cat'] #正如我们所要的下面再看看不用无捕获组会是什么后果:>>>re.findall( r‟I have a dog|cat‟ , s )['I have a dog', 'cat'] #它将‟I have a dog‟和‟cat‟当成两个规则了至于无捕获组的使用,后面将仔细说明。

这里先跳过。

‘.’匹配所有字符匹配除换行符‟/n‟外的所有字符。

如果使用了‟S‟选项,匹配包括‟/n‟的所有字符。

例:>>> s=‟123 /n456 /n789‟>>>findall(r….+‟,s)['123', '456', '789']>>>re.findall(r….+‟ , s , re.S)['123/n456/n789']‘^’和’$’匹配字符串开头和结尾注意‟^‟不能在‘[ ]’中,否则含意就发生变化,具体请看上面的‟[… …]‟说明。

在多行模式下,它们可以匹配每一行的行首和行尾。

具体请看后面compile函数说明的‟M‟选项部分‘/d’匹配数字这是一个以‟/‟开头的转义字符,‟/d‟表示匹配一个数字,即等价于[0-9]‘/D’匹配非数字这个是上面的反集,即匹配一个非数字的字符,等价于[^0-9]。

注意它们的大小写。

下面我们还将看到Python的正则规则中很多转义字符的大小写形式,代表互补的关系。

这样很好记。

‘/w’匹配字母和数字匹配所有的英文字母和数字,即等价于[a-zA-Z0-9]。

‘/W’匹配非英文字母和数字即‟/w‟的补集,等价于[^a-zA-Z0-9]。

‘/s’匹配间隔符即匹配空格符、制表符、回车符等表示分隔意义的字符,它等价于[ /t/r/n/f/v]。

(注意最前面有个空格)‘/S’匹配非间隔符即间隔符的补集,等价于[^ /t/r/n/f/v]‘/A’匹配字符串开头匹配字符串的开头。

它和‟^‟的区别是,‟/A‟只匹配整个字符串的开头,即使在‟M‟模式下,它也不会匹配其它行的行首。

‘/Z’匹配字符串结尾匹配字符串的结尾。

它和‟$‟的区别是,‟/Z‟只匹配整个字符串的结尾,即使在‟M‟模式下,它也不会匹配其它各行的行尾。

例:>>> s= '12 34/n56 78/n90'>>>re.findall( r'^/d+' , s , re.M ) #匹配位于行首的数字['12', '56', '90']>>>re.findall( r‟/A/d+‟, s , re.M ) #匹配位于字符串开头的数字['12']>>>re.findall( r'/d+$' , s , re.M ) #匹配位于行尾的数字['34', '78', '90']>>>re.findall( r‟/d+/Z‟ , s , re.M ) #匹配位于字符串尾的数字['90']‘/b’匹配单词边界它匹配一个单词的边界,比如空格等,不过它是一个‘0’长度字符,它匹配完的字符串不会包括那个分界的字符。

而如果用‟/s‟来匹配的话,则匹配出的字符串中会包含那个分界符。

例:>>> s = 'abcabcdebcbcd'>>>re.findall( r‟/bbc/b‟ , s ) #匹配一个单独的单词…bc‟,而当它是其它单词的一部分的时候不匹配['bc'] #只找到了那个单独的‟bc‟>>>re.findall( r‟/sbc/s‟ , s )#匹配一个单独的单词…bc‟[' bc '] #只找到那个单独的‟bc‟,不过注意前后有两个空格,可能有点看不清楚‘/B’匹配非边界和‟/b‟相反,它只匹配非边界的字符。

它同样是个0长度字符。

接上例:>>>re.findall( r‟/Bbc/w+‟ , s ) #匹配包含‟bc‟但不以‟bc‟为开头的单词['bcde'] #成功匹配了‟abcde‟中的‟bcde‟,而没有匹配‟bcd‟‘(?:)’无捕获组当你要将一部分规则作为一个整体对它进行某些操作,比如指定其重复次数时,你需要将这部分规则用‟(?:‟ …)‟把它包围起来,而不能仅仅只用一对括号,那样将得到绝对出人意料的结果。

例:匹配字符串中重复的‟ab‟>>> s=‟ababababbabbaabaab‟>>>re.findall( r‟/b(?:ab)+/b‟ , s )['ababab']如果仅使用一对括号,看看会是什么结果:>>>re.findall( r‟/b(ab)+/b‟ , s )['ab']这是因为如果只使用一对括号,那么这就成为了一个组(group)。

相关文档
最新文档