网站改版合同,深圳百度关键字优化,官方网站怎么制作,信息流广告投放公司一、初识正则表达式
1、概念
正则表达式是对字符串操作的一种逻辑公式#xff0c;它会将事先定义好的一些特定字符#xff0c;以及这些特定字符的组合#xff0c;组成一个规则字符串#xff0c;并且通过这个规则字符串表达对给定字符串的过滤逻辑。
一条正则表达式也称为…一、初识正则表达式
1、概念
正则表达式是对字符串操作的一种逻辑公式它会将事先定义好的一些特定字符以及这些特定字符的组合组成一个规则字符串并且通过这个规则字符串表达对给定字符串的过滤逻辑。
一条正则表达式也称为一个模式使用每个模式可以匹配指定文本中与表达式模式相同的字符串。正则表达式由普通字符、元字符或预定义字符集组成其中普通字符包括大小写字母和数字。
常见用途 数据验证比如电话号码、邮箱等 替换文本快速找到特定文本用于替换 快速提取字符串基于匹配规则快速从文档中查找或提取子字符串
3、正则的用途举例
案例1
以下哪些是四大名著
A.西游记
B.三国演义
C.水浒传
D.红楼梦
你喜欢哪些课程
A.python
B.java
C.hadoop
D.爬虫
执行3/2后的结果正确的是
A、1
B、1.0
B、1.5
B、0以上排版比较浪费空间将其变为一行 请将选项后面的.换成、 案例2
Zhangsan like orange or apple将or替换为and 二、基本语法
1、普通字符
正则表达式中的普通字符由没有显示的指定为元字符的打印和非打印的字符组成普通字符没有其它含义表示它本身。
举例
hello world匹配hello
hello2、元字符
使用简单的元字符表达某一类字符下面列出常用的匹配方式
预定义字符类
元字符描述.**默认模式**匹配任何1个字符但换行除外**DOTALL模式**匹配任意字符\d一个数字[0-9]\D非数字[^0-9]\h水平空白字符[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]\H非水平空白字符[^\h]\s空白字符[ \t\n\x0B\f\r]\S非空白字符[^\s]\v垂直空白字符[\n\x0B\f\r\x85\u2028\u2029]\V非垂直空白字符[^\v]\w单词字符[a-z,A-Z,_,0-9]\W非单词字符[^\w]
POSIX 字符类仅限 US-ASCII
元字符描述\p{Lower}小写字母字符[a-z]\p{Upper}大写字母字符[A-Z]\p{ASCII}所有 ASCII[\x00-\x7F]\p{Alpha}字母字符[\p{Lower}\p{Upper}]\p{Digit}十进制数[0-9]\p{Alnum}字母数字字符[\p{Alpha}\p{Digit}]\p{Punct}标点符号!#$%()*,-./:;?[\]^_{\p{Graph}可见字符[\p{Alnum}\p{Punct}]\p{Print}可打印字符[\p{Graph}\x20]\p{Blank}空格或制表符[ \t]\p{Cntrl}控制字符[\x00-\x1F\x7F]\p{XDigit}十六进制数字[0-9a-fA-F]\p{Space}空白字符[ \t\n\x0B\f\r]
举例
重庆大学 张三,ZhangSan 8000元 重庆万州
重庆大学 李四,Lisiq 8800元 重庆万州
重庆大学 王五,Wangwu 9800元 四川成都思考匹配工资信息
\d\d\d\d思考匹配中文姓名
\s\s,
其中,用于辅助定位思考匹配英文姓名 3、 转义字符
我们已经学了部分元字符比如. ? *等那如果我们想要查找元字符本身比如要查找. 或者 * 就出现了问题没办法指定它们因为它们会被解释成别的意思。这时就得使用 \来取消这些字符的特殊意义从而表示字符字面量。
元字符转义字符$\$.\.\*\*?\?^\^/\/\\\(\()\)[\[]\]{\{}\}
举例
script srcstudent.js/script
script srcscore.xml/script取出文件名
\w\.\w
说明\w中的【】表示\w重复1次或多次。说人话能匹配1个或多个字母\.表示【.】的转义字符因为【.】在正则表达式中有特殊的含义举例
apples price is $10.01 per kg.
apples price is $10.02 per kg.取出价格
\d\.\d4、字符集
在正则表达式语法中方括号表示字符范围也称字符集或者叫字符组。
字符类说明[abc]a、b、c[^abc]^ 表示取反除 a、b、c 以外的其它字符[a-zA-Z]- 表示连续匹配所有字母字符[0-9]- 表示连续匹配所有数字字符[a-c[x-z]]a到c或 x 到 z等价于 [a-cx-z]并[a-z[def]]表示and等价于 [def]交[a-z[^bc]]a到z但bc除外等价于[ad-z]差
举例
124 156 111 1337
92 20 999 666匹配所有的偶数数字
[02468]匹配所有的偶数
\d*[02468]
说明
\d*【*】匹配\d 0次或多次说人话匹配0个或多个数字
[02468]匹配1个偶数数数字5、量词
上面我们学会的是单个字符的匹配如果要表达多个类似的字符只能通过复制多次的方式比如我们要查找5个连在一起的数字要写成\d\d\d\d\d按程序员的思维显然不合理比如我们要表示1000个数字、任意多个数字、…
接下来介绍如何通过量词来表示上面的情形下面列出了几种量词的写法
量词含义举例X?X出现 0次 或 1次\d? 0个或1个数字XX出现 1次 或 多次\d1个或多个数字X*X出现 0次 或 n次\d* 0个或多个数字X{m}X出现 m次\d{3} 3个数字X{m,}X出现 至少m次\d{2,} 至少3个数字X{m,n}X出现 m~n次0\d{2,3} 0后面根2-3个数字
举例
ggle gogle google gooogle goooogle gooooogle goooooogle gooooooogle goooooooogle匹配上面所有的字符串
go*gle
说明
o*o可以出现0次或多次举例
重庆大学 张三,ZhangSan 80000元 重庆万州
重庆大学 李四,Lisiq 8800元 重庆万州
重庆大学 王五,Wangwu 9800元 四川成都思考匹配工资信息
\d思考匹配中文姓名
(\s),
说明【,】用于定位()表示分组方便后续通过分组编号取出这部分数据思考匹配英文姓名
,(\w)
说明【,】用于定位()表示分组方便后续通过分组编号取出这部分数据举例
13612345678
13612345678abc
24654897132
12306123456匹配手机号码
简易版本
1[3456789]\d{9}$
说明【$】表示以\d{9}也就是9个数字结尾具体用法见出面的边界。如果不写【$】13612345678abc也会被匹配6、边界
如何表示一个字符串的起始位置和结束位置呢这便是我们要讲的边界这里先给几个简单的边界表示
边界匹配器描述^一行的开头^hi.*以hi开头的行$一行的结尾.\.jpg$以.jpg结尾的行\b单词边界指的是占位的字符左右的间隙位置\bor\b匹配两边是边界的or\B非单词边界 注意 单词指的是 \w 可以匹配的字符即数字、大小写字母以及下划线 [0-9a-zA-Z_]边界 指的是占位的字符左右的间隙位置边界是零宽断言只匹配位置, 不匹配字符 举例
Zhangsan like orange or apple将or替换为and 【老师你也太坏了不我是让你爱上正则表达式】
查找框里写\bor\b
替换框里写and7、选择、分组和、向后引用
1选择或分支
正则表达式里的选择条件指的是有几种规则如果满足其中任意一种规则都应该当成匹配具体方法是用 | 把不同的规则分隔开。
X|Y 任何一个X或者Y比如要识别如下两种固话号码
0991-8585671
023-58102054
(0991)8585671
(023)58102054则可以写成
0\d{2,3}-?\d{7,8}|\(0\d{2,3}\)\d{7,8}2分组
概念
可以使用小括号( )来指定一个子表达式(也叫分组)例如
(http)(www.*com)(http)?(www.*com) http作为一个整体可有可无 组号
捕获组通过从左到右计算它们的左括号来编号
例如在表达式 ((A)(B(C))) 中有四个这样的组
1号分组((A)(B(C)))
2号分组 (A)
3号分 (B(C))
4号分组 (C)
注意分组编号是从1开始的0号分组代表整个表达式例子
还记得刚写的两种固话的匹配吗可以写成
(\(0\d{2,3}\)|0\d{2,3}-?)\d{7,8}3分组捕获与后向引用
作用将前面分组匹配到的结果内容以组号的方式引用给到后续表达式继续使用。 说明默认情况下每个分组会自动拥有一个组号规则是从左向右以分组的左括号为标志第一个出现的分组的组号为1第二个为2以此类推。
例子
请找到出左右对称的信息
welcome
hello
你好
吃了吗例子
匹配重复单词的字符串
go go
kitty kitty\b(\w)\b\s\1\b
说明\1中的1表示组号在这里表示(\w)的匹配结果8、贪婪、懒惰
先来看个例子
123abc123456abc如果想找出123abc和123456abc两个字符串你兴奋的写下了.*abc结果发现只匹配了一次把整个字符串匹配了。这便是我们要讲的匹配模式。
1贪婪
当正则表达式中包含能接受重复的限定符时通常的行为是在使整个表达式能得到匹配的前提下匹配尽可能多的字符这被称为贪婪匹配
示例a.*b它将会匹配最长的以a开始以b结束的字符串。如果用它来搜索 aabab的话它会匹配整个字符串aabab。
属于贪婪模式的量词也叫做匹配优先量词包括“{m,n}”、“{m,}”、“?”、“*”和“”。
2懒惰
如果想要匹配尽可能少的字符呢这就是懒惰匹配模式。
只要在量词后面加上一个问号?就可以了。
比如前面的示例你只需要将正则表达式写为如下形式即可
.*?abc懒惰匹配总是出现在有量词的地方有如下懒惰量词
语法描述*重复任意次但尽可能少重复?重复1次或更多次但尽可能少重复??重复0次或1次但尽可能少重复{n,}?重复n次以上但尽可能少重复{m,n}?重复m到n次但尽可能少重复 注意 问号(?)问号有两种场景 一是以量词方式使用表示?前面的子表达式或者字符出现1次或者0次二是出现在量词后面表示懒惰匹配。 三、在String类中使用正则
String类提供了3个实例方法支持正则操作
① matches 匹配
boolean matches(String regex)判断此字符串是否与给定的 正则表达式 匹配。例如
// 判断是不是一个正确的电话号码
String tel 023-58580000;
boolean matches tel.matches(\\d-\\d);
System.out.println(matches);② split 拆分
String[] split(String regex)围绕给定 正则表达式 的匹配项拆分此字符串。String[] split(String regex, int limit)围绕给定 正则表达式 的匹配项拆分此字符串。例如
// 按正则对字符串进行拆分
String stuInfo zhangsan china-cq 1985/11/12;
//String[] rst stuInfo.split( |-|/);
String[] rst stuInfo.split([ -/]);
for (String item : rst) {System.out.println(item);
}③ replace相关
String replace(String old, String new)String replaceFirst(String regex, String replacement)使用replacement替换regex的第一个匹配。String replaceAll(String regex, String replacement)使用replacement替换regex的所有匹配。例如
(86)023-12345670
021:12345671
010-12345672
需要得到如下结果
(023)12345670
(021)12345671
(010)12345672String stuInfo (86)023-12345670021:12345671010-12345672;String string stuInfo.replaceAll((\\(86\\))?(\\d{3})(-|:), ($2));
System.out.println(string);四、Pattern类和Matcher类
Matcher类不能单独使用用于配合Pattern类。Pattern类根据正则表达式创建匹配规则Matcher根据匹配规则执行具体的匹配操作。
1、创建匹配模式规则
使用 Pattern.compile() 静态方法编译正则表达式字符串形成模式对象匹配规则
static Pattern compile(String regex)将给定的正则表达式字符串编译成一个模式。
static Pattern compile(String regex, int flags)将给定的正则表达式字符串编译成具有【给定标志】的模式。【flags可以取以下值】Pattern.CANON_EQ 启用规范等价。Pattern.CASE_INSENSITIVE 启用不区分大小写的匹配。【重要】Pattern.COMMENTS 模式中允许空格和注解。Pattern.DOTALL 启用 dotall 模式。【重要】Pattern.LITERAL 启用模式的文字解析。Pattern.MULTILINE 启用多行模式。【重要】Pattern.UNICODE_CASE 启用 Unicode 感知大小写折叠。Pattern.UNICODE_CHARACTER_CLASS 启用Unicode版本预定义字符类和POSIX字符类.Pattern.UNIX_LINES 启用 Unix 行模式。例如
String phone 13100000000;
// 获得模式对象匹配规则
Pattern pattern Pattern.compile(1[345789]\\d{9}); 2、创建匹配器
根据模式匹配规则生成匹配器。使用 Pattern对象的 matcher(CharSequence input) 方法创建匹配器 Matcher类用于在给定的Pattern实例的模式控制下进行字符串的匹配工作。 例如
String phone 13100000000;
Pattern pattern Pattern.compile(1[345789]\\d{9}); // 匹配规则
Matcher matcher pattern.matcher(phone); // 匹配器3、匹配器的常用方法 匹配器Matcher的实例对象 ① matches匹配
abc.matches(\w{3})
boolean matches()字符串是否与正则表达式【完全】匹配例如
String phone 13100000000;
Pattern pattern Pattern.compile(1[345789]\\d{9}); // 编译后的模式
Matcher matcher pattern.matcher(phone);
System.out.println(matcher.matches());② lookingAt匹配
boolean lookingAt()字符串的【开始位置】是否有和正则表达式匹配的内容例如 ③ find匹配
boolean find()字符串中是否有【与位置无关】和正则表达式匹配的内容
boolean find(int start)字符串中【从start指定的地方开始】是否有【与位置无关】和正则表达式匹配的内容例如 ④ groupCount 匹配
int groupCount()返回匹配到的分组结果个数例如 ⑤ group
获得匹配结果注意 要先调用匹配方法后才能获得匹配结果否则报错
String group(); String group(0);//返回匹配到的【整体】结果
String group(int group);//根据【分组编号0表示完整结果组号从1开始】获取匹配到的结果例如 ⑥ replaceAll
String replaceAll(String replacement)将正则表达式对应的【所有】【完整匹配】结果使用字符串替换并返回替换后的新字符串例如 ⑦ replaceFirst
String replaceFirst(String replacement)将正则表达式对应的【第一个】【完整匹配】结果使用字符串替换并返回替换后的新字符串例如 ⑧ 其他方法见API手册 4、其它相关用法
① 使用 pattern 匹配字符串
使用 Pattern.matches() 静态方法判断正则表达式与字符串【完全】匹配。
Static boolean matches(String regex, CharSequence input)例如
// 判断手机号格式是否正确
String phone 13100000000;
System.out.println(Pattern.matches(1[345789]\\d{9}, phone));② 使用 pattern 拆分字符串
Pattern.compile([ -/]).split(张三 中国/重庆/巴南 2011-11-11);
文章转载自: http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.qfrmy.cn.gov.cn.qfrmy.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.rtkz.cn.gov.cn.rtkz.cn http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn http://www.morning.qmbtn.cn.gov.cn.qmbtn.cn http://www.morning.yhywr.cn.gov.cn.yhywr.cn http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.tpnx.cn.gov.cn.tpnx.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.tzzfy.cn.gov.cn.tzzfy.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn http://www.morning.zcsyz.cn.gov.cn.zcsyz.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn http://www.morning.ybgpk.cn.gov.cn.ybgpk.cn http://www.morning.kqbzy.cn.gov.cn.kqbzy.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.rfwgg.cn.gov.cn.rfwgg.cn http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.haibuli.com.gov.cn.haibuli.com http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn http://www.morning.dwxqf.cn.gov.cn.dwxqf.cn http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.ho-use.cn.gov.cn.ho-use.cn http://www.morning.qwpyf.cn.gov.cn.qwpyf.cn http://www.morning.jmmz.cn.gov.cn.jmmz.cn http://www.morning.cfmrb.cn.gov.cn.cfmrb.cn http://www.morning.rnwt.cn.gov.cn.rnwt.cn http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn http://www.morning.wnywk.cn.gov.cn.wnywk.cn http://www.morning.21r000.cn.gov.cn.21r000.cn http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.mbfj.cn.gov.cn.mbfj.cn http://www.morning.kqzt.cn.gov.cn.kqzt.cn http://www.morning.kaweilu.com.gov.cn.kaweilu.com http://www.morning.jxlnr.cn.gov.cn.jxlnr.cn http://www.morning.rcmwl.cn.gov.cn.rcmwl.cn http://www.morning.pxmyw.cn.gov.cn.pxmyw.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.pcxgj.cn.gov.cn.pcxgj.cn http://www.morning.mkrqh.cn.gov.cn.mkrqh.cn http://www.morning.gwhjy.cn.gov.cn.gwhjy.cn http://www.morning.jrsgs.cn.gov.cn.jrsgs.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.spxk.cn.gov.cn.spxk.cn http://www.morning.zcncb.cn.gov.cn.zcncb.cn http://www.morning.sjqml.cn.gov.cn.sjqml.cn http://www.morning.wpspf.cn.gov.cn.wpspf.cn http://www.morning.wyppp.cn.gov.cn.wyppp.cn http://www.morning.pqktp.cn.gov.cn.pqktp.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.rjtmg.cn.gov.cn.rjtmg.cn http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.tdscl.cn.gov.cn.tdscl.cn http://www.morning.ryztl.cn.gov.cn.ryztl.cn http://www.morning.jwtjf.cn.gov.cn.jwtjf.cn http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn