码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2020-03-09 22:41:53      阅读:40      评论:0      收藏:0      [点我收藏+]

标签:exp   定义   字母   一个   字符   arch   特殊   表达式   占用   

反正就是把所有符合你规定的正则表达式格式的数据找到
常用正则表达式自己百度
eclispe用search也能用正则查找regualr expression


1.文本的复杂处理。(英译:规则表达式)
使用的时候需要测试,有的可能不支持
2. 字母,数字,汉字,下划线和没有特殊定义的符合就是普通字符,他会自动匹配

3.转义字符:\n \t 等 和Java一样
\d 是匹配0-9中任意一个数字
\d\d匹配2位的数字
\D 取反,意思是得到非数字
\w 任意一个字母数字下划线
\w 除了任意一个字母数字下划线都匹配
\s 匹配空白符
\S匹配非空白符
. ----》可以匹配除了换行符外的所有字符
[\s\S] 匹配所有字符
[xxx等等]---->匹配自定义的字符,中间放你想要的字符 都是 或的关系
[^xxx]---->匹配除了xxx外的字符
[a-d]----匹配a到d之间的字符(数字也行)
[a-d1-6]这个也可以(匹配a到d,1到6的字符)

4表达式中的特殊符号被包含到中括号中就失去意义除了(^.)
[\d.\-+]---->匹配数字小数点 - +


5 量词{n}匹配多少次
如:\d{4} 匹配4位的数字,重复4次,但是他只是修饰前一个数字
\d\d{4}找5位的
(\d\d){4} 这个才是找8位的
{m,n}最少m次,最多n次,默认是贪婪模式,匹配字符越多越好
非贪婪模式,匹配字符越少越好,修饰匹配次数的特殊符号后再加上一个?
\d{2,6}?
{m,}最少m次,最多不限制
? 正常的意思:匹配表达式出现次数0次或者一次=={0,1}
a\d?b --->匹配出现ab,a数字b,且数字b出现{0,1}
+ 表示至少出现1次=={1,}

* 表达式不出现或者出现任意次=={0,}


6字符边界:来匹配时是零宽的----》如\d是非0宽的,每次匹配都会占符号,一位占一个2位占2个
而它匹配用不到符号,是位置,符合某种条件的位置而并不是字符
(1)^ 与字符串开始的地方匹配 如下,输入i匹配所有i ,输入^i 仅仅匹配整个字符串开始的那个i
i love you i i i
i known dou you love me,iii

(2)$ 与字符串结束的地方匹配
同上i$ ,只找结尾处是否有i,有的话匹配,否则结尾即使是\t 他都不会匹配到i

\b匹配一个单词边界,前面的字符和后边的字符不全是\w
如 why\b why2没有匹配到,y前面是\w后面也\w
why why1
why why2 why
\bwhy 全亮,因为所有w的前面都不是\w, 即使后边是\w


7 软件来说 :case sensitive 区分大小写 case insensitive不区分大小写来匹配
单行模式:整个文本看成一个大字符串,只有一个开头结尾
此时. 可以匹配\n 在内的任意字符
$dont match at line break 可以切换
若在多行模式下还想匹配开头的一个 则再匹配的字符前加\A
匹配尾部则在后面加\Z


8 选择符和分组:
| 分支结构,左右两边表达式之间或关系,匹配左边或者右边
() 捕获组:(1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2)取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
(3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始
自动编号,捕获元素编号为0的第一个捕获是由整个正则表达式模式匹配的文本

([a-z]{2})\1这个意思是如有字符串 gogo goto toto dodo
开始是找2个字符如找到go,然后将go当作一组,存起来,此时\1代表go,
然后 再找一个go,找到,就标记,否则就不要
反向引用:\nnn 引用前面捕获组捕获到的字符
每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号
通过反向引用,可以对分组已捕获的字符串进行引用
(boy)\1 //相当于(boy)(boy),匹配boyboy
(boy)(girl)\1\2 //匹配boygirlboygirl
(?) (?) (?)
\1 \2 \3 此时这个三个所捕获到的字符就被\1\2\3所表示了
(()())()
此时\1 是第一个括号 \2 是第二个 \3是将第一个第二个包起来的括号,\4是第三个小括号


9 ?:非捕获组:使用()的时候不想保存()中子表达式匹配的内容,此时就可以用非捕获组来抵消
使用()带来的副作用(占内存)


10 预搜索:(零宽断言)
只进行子表达式的匹配,匹配内容不计入最终的匹配结果 是对位置的匹配
对于正则表达式的匹配,如果子表达式匹配到的是字符内容而非位置,并被保存到最终的匹配过程中
则认为这个表达式是占用字符的:若匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,
则认为这个子表达式是零宽度的
?=exp 断言自身出现的位置的后面能匹配表达式exp
?<=exp 断言自身出现的位置的前面能匹配表达式exp
?!=exp 断言此位置的后面不能匹配表达式exp
?<!exp 断言此位置的前面面不能匹配表达式exp
使用:[a-z]+(?=ing)

this is phone number by 正则;
( 0\d{2,3}-\d{7,8})|(1[435789]\d{9})

 

邮箱by正则 \.将.转义
[\w\-]+@[a-z0-9]+(\.[0-9a-z]{2,4}){1,2}
\- 意思是开头也包括下划线,如果用户的用户名用到下划线

 

正则表达式

标签:exp   定义   字母   一个   字符   arch   特殊   表达式   占用   

原文地址:https://www.cnblogs.com/whydbk/p/12452051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!