10分钟精通正则表达式

10分钟精通正则表达式概述 正则表达式是强大 便捷 高效的文本处理工具 正则表达式能够添加 删除 分离 叠加 插入和修改各种类型的文本和数据

大家好,欢迎来到IT知识分享网。

概述

正则表达式是强大、便捷、高效的文本处理工具。

正则表达式能够添加、删除、分离、叠加、插入和修改各种类型的文本和数据。

使用正则表达式节省下来的时间或许并不能让人很激动,但总比把时间消耗在文本编辑器中要好

正则表达式由元字符文字组成,元字符指的是*、+、^等字符,文字指的是字母、数字等字符;元符通常用来描述文本。

元字符-匹配单个字符的元字符

元字符

匹配对象

.

点号

匹配单个任意字符

[…]

字符组

匹配单个列出的字符,如[abc]

[^…]

排除型字符组

匹配单个未列出的字符,如[^abc]

\char

转义字符

若char是元字符,或转义序列无特殊含义时,匹配char对应的普通字符

注:在字符组内部(并且不在第一个位置和最后一个位置),

‘-’连字符作为元字符表示一个范围,如[a-z];如果不在字符组内部,

连字符代表普通字符。

元字符-提供计数功能的元字符

元字符

匹配对象

问号

容许匹配一次,但非必须

*

星号

可以匹配任意多次,也可能不匹配

+

加号

至少匹配一次,至多可能任意多次

{min,max}

区间量词

到少需要min次,至多容许max次

元字符-匹配位置的元字符

元字符

匹配对象

^

脱字符

匹配一行的开头位置

$

美元符

匹配一行的结束位置

\<

单词分界符

匹配单词的开始位置

\>

单词分界符

匹配单词的结束位置

元字符-其它元字符

元字符

匹配对象

|

alternation

匹配任意分隔的表达式

(…)

括号

限定多选结构的范围,为反向应用捕获文本

\1,\2.. $1,$2..

反向引用

匹配之前的第一、第二组括号内的表达式匹配的文本

各种量词

匹配优先量词

*、+、?、{min,max}

用ab*c去匹配abcde,肯定会匹配abc

忽略优先量词

*?、+?、??、{min,max}?

用ab*?c去匹配acde肯定会匹配ac,不会返回什么都没匹配

占有优先量词

*+、++、?+、{min,max}+

用(.*+)([0-9]+)去匹配aaaaa1,什么也匹配不到,一旦占有不再交还,目前只有java和php有

捕获分组和反向引用

捕获分组:将某些规律看成是一组,然后进行组级别的重复,可以得到意想不到的效果,正则表达式中分组用()表示,不参与捕获分组又要使用括号用(?:)表示。

反向引用:反向应用实际上应用的是正则表达式所匹配的文本值,而不是正则表达式字面值。

捕获分组和反向引用-示例1

文本样本(从中抽取出ip信息): :10.153.135.53:8611:4:: :10.153.110.123:8611:1:: :10.15.242.66:8611:4:: :10.15.242.65:8611:4:: :10.153.110.120:8611:1:: :10.153.110.122:8611:1:: :10.153.110.121:8611:1:: 正则表达式::([0-9.]+):([0-9]+):(.+)

捕获分组和反向引用-示例2

文本样本(为图片相对路径增加绝对路径):
<html>
<body>
	<div>12321321</div>
	<img src="/tv/pic/1.jpg"></img>
	<img src="/tv/pic/2.jpg"></img>
	<div>lasjdfljsadfpofdsahdsaf</div>
	<img src="/tv/pic/3.jpg"></img>
	<img src="/tv/pic/4.jpg"></img>
	<div>pwqipqpwepqweo;sdkf</div>
	<img src="/tv/pic/5.jpg"></img>
</body>
</html>
正则表达式:<img\s+src="([0-9a-z/.]+)">
替换为:<img src="http://www.pic0.baidu.com\1">

捕获分组和反向引用-示例3

正则表达式:([a-z]+)\s+\1 替换为:\1

If – then -else

正则表达式中的if-else结构用(?(condition)(reg1)|(reg2)) 举例(匹配img标签): <div> <img src="123"> </div> 正则表达式:(<div>\s*)?(<img\s+[^>]+>)(?(1)\s*</div>) 

环视

环视不匹配任何字符,只匹配文本中的特定位置。

类型

正则表达式

匹配成功的条件

肯定逆序环视

(?<=…..)

子表达式能够匹配左侧文本

否定逆序环视

(?<!….)

子表达式不能匹配左侧文本

肯定顺序环视

(?=….)

子表达式能够匹配右侧文本

否定顺序环视

(?!….)

子表达式不能匹配右侧文本

环视-肯定顺序示例

提取特征数据 样本示例: 1234.txt 456.java abc.cpp 9876.java 正则表达式 .+(?=\.java) 

环视-格式化数字

样本示例(每三位逗号分隔数字):  12345   正则表达式:(?<=\d)(?=(\d{3})+$) 

固化分组

固化分组使用(?>…)实现,固化分组匹配与正常的匹配并无差别,但是如果匹配进行到此结构之后(也就是,进行到闭括号之后),那么此结构体中的所有备用状态都会被放弃(不能被回溯)。 处理数字小数点,保留三位小数,第三位不能为零。 样本: . 12345. .78 134. 正则表达式:(\.\d\d(?>[1-9]?))\d+ 替换:\1 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/94152.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信