正则表达式介绍和例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正则表达式
含义:编写字符串处理的程序或网页时,会有查找符合某复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。它是记录文本规则的代码。
元字符
用来代替字符的符号
注:\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等正则表达式中的空格会当成空格匹配。(输入几个空格就匹配几个)
非打印字符
限定符
重复:表现重复时用的是大括号{}和* + ?,表示范围时用的是中括号[],中括号里面是只选其中一个的组合。表达分组时用圆括号(),一个圆括号表示一个意思。
●字符类[],用来表示取字符的范围区间,用中括号括起来
[0-9]代表\d
[a-z0-9A-Z]表示\w
●分支条件,用|表示或者的关系。
●贪婪与懒惰、最先开始匹配拥有最高优先权
*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
.*表示尽可能匹配多的字符
.*?表示尽可能少的字符
例如:字符串aabab,用贪婪匹配a.*b得到aabab,用懒惰匹配a.*?b得到
定位符
定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达
子表达式分组获取()
●分组,用()把子表达式括起来,给一个组号,后面可以再用
●后向引用,用()定义的分组,可以给它定一个组名,在后面加以利用。
用(?
捕获
从下面的例子中可以看到,根据正则表达式,只捕获了括号内的东西到组中,第一个括号前面^\D*匹配到的东西被忽略了。
零宽度断言
(?=exp) 用法:\b\w+(?=ing)\b,匹配以ing结尾的单词的前面部分,如查找I’m singing and dancing,会匹配sing和danc
(?<=exp) 用法:(?<=rea)\w+\b,匹配以rea开头的单词的后面部分,如查找reading a book,会匹配ding
注释:(?#comment)
例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)
反义
反义,找完全相反的内容。注意这里使用的都是大写
平衡组/递归匹配
(?'group')把捕获的内容命名为group,并压入堆栈(Stack)
(?'-group')从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
(?(group)yes|no)如果堆栈上存在以名为group的捕获内容的话,继续匹配yes 部分的表达式,否则继续匹配no部分
(?!)零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
<[^<>]*(((?'Open'<)[^<>]*)+((?'-Open'>)[^<>]*)+)*(?(Open)(?!))>
可以从xx
可以找到配对的
好的例子
将所有地址中的ROAD写成RD.
若地址中的字符不是大写的,先可以都改成大写的。
匹配以罗马数字标示的四位数年份
注:在罗马数字上加一个横线,就会乘以1000倍。所以4000就用ⅯⅬ(其中L要带上横线)紧凑正则表达式:
^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
最后对应的松散正则表达式是
匹配电话号码
紧凑正则表达式:(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$松散正则表达式: