正则表达式
Posted whydbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
反正就是把所有符合你规定的正则表达式格式的数据找到
常用正则表达式自己百度
eclispe用search也能用正则查找regualr expression
1.文本的复杂处理。(英译:规则表达式)
使用的时候需要测试,有的可能不支持
2. 字母,数字,汉字,下划线和没有特殊定义的符合就是普通字符,他会自动匹配
3.转义字符:
等 和Java一样
d 是匹配0-9中任意一个数字
dd匹配2位的数字
D 取反,意思是得到非数字
w 任意一个字母数字下划线
w 除了任意一个字母数字下划线都匹配
s 匹配空白符
S匹配非空白符
. ----》可以匹配除了换行符外的所有字符
[sS] 匹配所有字符
[xxx等等]---->匹配自定义的字符,中间放你想要的字符 都是 或的关系
[^xxx]---->匹配除了xxx外的字符
[a-d]----匹配a到d之间的字符(数字也行)
[a-d1-6]这个也可以(匹配a到d,1到6的字符)
4表达式中的特殊符号被包含到中括号中就失去意义除了(^.)
[d.-+]---->匹配数字小数点 - +
5 量词{n}匹配多少次
如:d{4} 匹配4位的数字,重复4次,但是他只是修饰前一个数字
dd{4}找5位的
(dd){4} 这个才是找8位的
{m,n}最少m次,最多n次,默认是贪婪模式,匹配字符越多越好
非贪婪模式,匹配字符越少越好,修饰匹配次数的特殊符号后再加上一个?
d{2,6}?
{m,}最少m次,最多不限制
? 正常的意思:匹配表达式出现次数0次或者一次=={0,1}
ad?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,有的话匹配,否则结尾即使是 他都不会匹配到i
匹配一个单词边界,前面的字符和后边的字符不全是w
如 why why2没有匹配到,y前面是w后面也w
why why1
why why2 why
why 全亮,因为所有w的前面都不是w, 即使后边是w
7 软件来说 :case sensitive 区分大小写 case insensitive不区分大小写来匹配
单行模式:整个文本看成一个大字符串,只有一个开头结尾
此时. 可以匹配
在内的任意字符
$dont match at line break 可以切换
若在多行模式下还想匹配开头的一个 则再匹配的字符前加A
匹配尾部则在后面加
8 选择符和分组:
| 分支结构,左右两边表达式之间或关系,匹配左边或者右边
() 捕获组:(1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2)取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
(3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始
自动编号,捕获元素编号为0的第一个捕获是由整个正则表达式模式匹配的文本
([a-z]{2})1这个意思是如有字符串 gogo goto toto dodo
开始是找2个字符如找到go,然后将go当作一组,存起来,此时1代表go,
然后 再找一个go,找到,就标记,否则就不要
反向引用:
nn 引用前面捕获组捕获到的字符
每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号
通过反向引用,可以对分组已捕获的字符串进行引用
(boy)1 //相当于(boy)(boy),匹配boyboy
(boy)(girl)12 //匹配boygirlboygirl
(?) (?) (?)
1 2 3 此时这个三个所捕获到的字符就被123所表示了
(()())()
此时1 是第一个括号 2 是第二个 3是将第一个第二个包起来的括号,4是第三个小括号
9 ?:非捕获组:使用()的时候不想保存()中子表达式匹配的内容,此时就可以用非捕获组来抵消
使用()带来的副作用(占内存)
10 预搜索:(零宽断言)
只进行子表达式的匹配,匹配内容不计入最终的匹配结果 是对位置的匹配
对于正则表达式的匹配,如果子表达式匹配到的是字符内容而非位置,并被保存到最终的匹配过程中
则认为这个表达式是占用字符的:若匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,
则认为这个子表达式是零宽度的
?=exp 断言自身出现的位置的后面能匹配表达式exp
?<=exp 断言自身出现的位置的前面能匹配表达式exp
?!=exp 断言此位置的后面不能匹配表达式exp
?<!exp 断言此位置的前面面不能匹配表达式exp
使用:[a-z]+(?=ing)
this is phone number by 正则;
( 0d{2,3}-d{7,8})|(1[435789]d{9})
邮箱by正则 .将.转义
[w-]+@[a-z0-9]+(.[0-9a-z]{2,4}){1,2}
- 意思是开头也包括下划线,如果用户的用户名用到下划线
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章