正则表达式

正则表达式

作用:对文本的复杂处理;
工具:RegexBuddy

语法:
①普通字符
字母,汉字,下划线,数字以及没有特殊含义的标点符号,都是普通字符;
在匹配字符串时,匹配与之相同的一个字符;

②转义字符
\n换行符,\t制表符,\\即\本身;
\^,\(,\),\+,\?,\{,\}等;

③标准字符集合
能够与多种字符匹配的表达式;
注意区分大小写,大写是相反的意思(即非它之外的所有字符);
\d,任意一个数字,0~9中的任意一个;
\w,任意一个字母或数字或下划线,也就是A~Z,0~9,a~z,_中任意一个;
\s,包括空格,制表符,换行符等空白字符的其中任意一个;
.,小数点可以匹配任意一个字符(除了换行符),如果要匹配包括"\n"在内的所有字符,一般用[\s\S];

④自定义字符集合---->多个匹配条件
[]方括号匹配方式,能够匹配方括号中任意一个字符
[abc5@],匹配"a"或"b"或"5"或"@";
[^abc],匹配"a""b""c"之外的任意一个字符
[f-k],匹配"f"-"k"之间的任意一个字母
[^A-F0-3],匹配"A"-"F","0"-"3"之外的任意一个字符;

正则表达式的特殊符号,被包含到中括号中,则失去了特殊意义,除了^,-之外;
标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将包含该集合;如[\d.\-+]将匹配:数字,小数点,+,-

⑤量词---->匹配次数
修饰匹配次数的特殊符号
{n}表达式重复n次;如\d{6},表示匹配6位的数字;
{m,n}表示式至少重复m次,最多重复n次;
{m,}表达式至少重复m次
?匹配表达式0次或者1次,相当于{0,1}
+表达式至少出现一次,相当于{1.}
*表达式不出现,或者出现任意次,相当于{0,}

匹配次数中的贪婪模式(匹配字符越多越好,默认);
匹配次数中的非贪婪模式(匹配字符越少越好,修饰匹配次数的特殊符号后再加上一个"?"号)

⑥字符边界(本组标记匹配的不是字符而是位置,符合某种条件的位置)
IGNORECASE 忽略大小写模式
匹配时忽略大小写;默认情况下,正则表达式是要区分大小写的;

SINGLELINE 单行模式
整个文本看做一个字符串,只有一个开头,一个结尾;
使小数点"."可以匹配包含换行符(\n)在内的任意字符;

MULTILINE 多行模式
每行都是一个字符串,都有开头和结尾;
在指定了MULTILINE之后,如果需要仅匹配字符串开始和结束位置,可以使用\A和\Z;

^与字符串开始的地方的匹配
$与字符串结束的地方匹配
\b匹配一个单词边界(前面的字符和后面的字符不全是\w)

⑦选择符和分组
| 分支结构,左右两边表达式之间"或"关系,匹配左右或者右边;

() 捕获组----->主要用来表示重复元素
在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰;
取匹配结果时,括号中的表达式匹配到的内容可以被单独得到;
每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号,捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本;

(?:Expression)一些表达式中,不得不使用(),但又不需要保存()中子表达式匹配的内容,这是可以用非捕获组来抵消使用()带来的副作用;

⑧反向引用(\nnn)--->匹配多个括号
每一个()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号;
通过反向引用,可以对分组已捕获的字符串进行引用;

⑨零宽断言---->类似于模糊匹配
(?=exp)  断言自身出现的位置的后面能匹配表达式exp;
(?<=exp) 断言自身出现的位置的前面能匹配表达式exp;
(?!exp)  断言自身出现的位置的后面不能匹配表达式exp;
(?<!exp) 断言自身出现的位置的前面不能匹配表达式exp;

如[a-z]+(?=ing),表示的是,开头是a-z,结尾是ing,但是返回的时候这个ing并不包含在内;

⑩java中的正则表达式
类 Pattern
正则表达式的编译表示形式;
Pattern p = Pattern.compile(r,int);//建立正则表达式,并启用相应模式
类 Matcher
通过解释Pattern对character sequence执行匹配操作的引擎;
Matcher m = p.matcher(str);//匹配字符串


注意:
①关于转义字符的正则
如,我想匹配\,给出的资源字符串必须是\\,第一个\表示转义,第二个\才表示\符号;
但是在正则的时候,必须要写成,Pattern pattern = Pattern.compile("\\\\");因为\\\\ ,java解析为\\交给正则表达式, 正则表达式再经过一次转换,才可以把\\转换成为\;
想匹配^,给出的资源是^,但是在正则的时候,必须要写成,Pattern pattern = Pattern.compile("\\^");

②关于标准字符集合的正则
Pattern pattern = Pattern.compile("\\w");它表示只匹配一个;

③关于自定义集合字符的正则
Pattern pattern = Pattern.compile("[\\d\\^]");它也表示只匹配一个;也可以这样写Pattern pattern = Pattern.compile("[\\d^]");
但是不可以这样写:Pattern pattern = Pattern.compile("[^\\d]"),这样写表示除了数字之外的任意字符,^表示取反;

正则表达式的特殊符号如"&",被包含到中括号中,则失去了特殊意义,除了^,-之外;
标准字符集合(如\w\d\s),除小数点外,如果被包含于中括号,自定义字符集合将包含该集合;如[\d.\-+]将匹配:数字,小数点,+,-;
如:Pattern pattern = Pattern.compile("[\\d.\-]"),就是表示匹配数字,小数点和-;

④关于正则表达式中的量词
Pattern pattern = Pattern.compile("(\\d\\d){2}");表示4次,即4位,?+*均有特殊含义

⑤正则表达式中的字符边界
^表示字符串开始的地方;&表示字符串结束地方

⑥匹配号码
Pattern pattern = Pattern.compile("(0[1-9]{2,3}-\\d{7,8})|(1[358]\\d{9,})");如18521367419或者0556-6736472

⑦匹配邮箱
Pattern pattern = Pattern.compile("[\\w\\-]+@[a-z\\d]+(\\.[a-z]{2,4}){1,2}",Pattern.CASE_INSENSITIVE);
如960358979@QQ.com.cn

转载于:https://my.oschina.net/u/3491256/blog/1543939

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值