正则规则

/…/ 代表一个模式的开始和结束
^   匹配字符串的开始
$   匹配字符串的结束
(x) 匹配x保存x在名为$1...$9的变量中 
x|y 匹配x或y 
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
[^xyz] 不匹配这个集合中的任何一个字符 

[\b] 匹配一个退格符 
\b 匹配一个单词的边界 
\B 匹配一个单词的非边界 
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M 
\n 匹配一个换行符 
\r 匹配一个回车符 
\t 匹配一个制表符 
\v 匹配一个重直制表符
\s  任何空白字符
\S  任何非空白字符
\d  匹配一个数字字符,等价于[0-9]
\D  除了数字之外的任何字符,等价于[^0-9]
\w  匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

.   除了换行符之外的任意字符

{n} 匹配前一项n次
{n,}    匹配前一项n次,或者多次
{n,m}   匹配前一项至少n次,但是不能超过m次
*   匹配前一项0次或多次,等价于{0,}
+   匹配前一项1次或多次,等价于{1,}
?   匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1}


"^\\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 
字符? 
意义:匹配?前面的字符0次或1次。 
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;

//(?![0-9]+$) 不能是纯数字 , 限制 ,不占位
            
// ?! 开头不能只是拼接数字结尾
// 开始位置开始算起 , $是一个结尾位置
//(?![0-9]+$)就是修饰不能是纯数字
            
// 断言此位置后,字符串结尾之前,所有的字符不能全部由数字([^a-zA-Z]表示非英文字母,结合下文,这里匹配数字)组成。
// [0-9]+ 是纯数字
// ?! 不能以后边的这些开始。
//(?![a-zA-Z]+$) 不能是纯字母 , 限制,不占位
            
//[0-9A-Za-z]{6,20} 6-20位的字符
var reg=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;


2.查找子串在父串中的位置

>>> re.search(r'shuage','i love shuage!!')
<_sre.SRE_Match object; span=(7, 13), match='shuage'>

2.查找父串中所有的子串,返回一个数组

>>> re.findall(r'[a-z]','ShuaiGe')
['h', 'u', 'a', 'i', 'e']

3.综合整理

.        点(.)代表任意字符
\.       匹配点(.)
\d      配置所有的数字
[]       匹配[]里面任何一个字符
{}       前边要匹配的字符要显示多少次
|        逻辑或
()       表示分组
^       以字符串开头
$       以字符串结尾
\       把元字符变为普通字符,把普通字符变为特殊字符例\d
\数字   例如\1表示第一组(小括号里面的正则)再重复一次,\2表示第二组再重复一次
            举例: (shuage)\1  == shuageshuage     (shuage)(hao)\2 == shuagehaohao
        
        如果以0开头,或者3个数字的长度,那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的ASCII码值对应的字符


[.]  匹配.

[\]   会报错,\ 在[]中表示转意符
[\n]  表示回车
[^a-z] 表示除了a-z以外的都匹配,^表示取反
[a-z^] 表示^本身

*   表示匹配前面的子表达式零次或多次,等价于{0,}
+  表示匹配前面的子表达式一次或多次,等价于{1,}
?   表示匹配前面的子表达式零次或1次,等价于{0,1}

正则默认是贪婪模式,启用非贪婪模式方法:在重复后面加上?就可以了。


\b   表示匹配一个单词的边界,被定义为Unidcode的字母数字或者下横线字符也被认为是一个单词的一部分    .()!属于单词的边界

\B   表示匹配非单词边界,其实就是跟上边的相反
\D  表示匹配跟\d相反的字符
\s   表示匹配空白字符,例如 \t(制表符)\n(空格)\r(回车)\f(换页)\v(表示垂直的tab键)
\S  表示与\s相反
\w 表示匹配单词字符
\W 表示与\w相反

4.正则说明

[a-z] 匹配所有的小写字母
[0-9] 匹配所有的数字
3{3}  3个3   大括号前边这个字符是多少个
3{3,10}   3-10个3   大括号前边这个字符是多少个

5.案例

匹配(0-255):[01]\d\d|2[0-4]\d|25[0-5]    按照每位来匹配
匹配ip :(([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3}([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})
  解释:
    ([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1}) : ()小括号里面的是一个完整部分,匹配(0-255)
    (([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.) : 最外边小括号是一个完整部分,匹配(0-255).
    (([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3} : 表示前边的小括号执行3次

正则默认贪婪模式
>>> s = '<html><title> i love shuage </title></html>'
>>> re.search(r'<.+>',s)
<_sre.SRE_Match object; span=(0, 43), match='<html><title> i love shuage </title></html>'>

启用非贪婪模式
>>> s = '<html><title> i love shuage </title></html>'
>>> re.search(r'<.+?>',s)
<_sre.SRE_Match object; span=(0, 6), match='<html>'>

6.编译正则表达式 -- 成模块级别 --有6种编译模式

>>> p = re.compile(r'[A-Z]')
>>> p.search('I love ShuaGe')
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> p.findall('I love ShuaGe')
['I', 'S', 'G']
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 正则表达式:专门规定字符串中字符*格式规则*的表达式 何时使用:只要定义字符串格式规则,都用正则表达式 1、字符集...
    MC丶逗逼嘿阅读 604评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,621评论 18 399
  • 家门口的老饭店,味道很棒 韭菜不香,有点水,不太好吃。 哇这是一道很实的大菜啊,肠不是很肥,所以超好吃! 他们家的...
    菠00阅读 162评论 0 0
  • 观「好奇心日报」,随手摘录一些值得借鉴的版式设计。 ▎巧用icon第一眼看到的不是文字,而是三个黄色的圆形,这是给...
    宁小南阅读 965评论 4 9