正则表达式学习笔记(一)
来源:互联网 发布:c语言预处理指令应用 编辑:程序博客网 时间:2024/05/22 03:35
一、什么是正则表达式
在进行文本处理的时候,我们经常需要根据自己的需求提取某些特定的字符串,因而我们需要给计算机提供匹配模板,而这个模板就是正则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
大部分时候我们见到的正则表达式都是以字符串的形式展现,如"w+\\.baidu\\.com",以至于我曾认为正则表达式就是一个字符串。但其实这只是为了方便人们使用,以Python语言的re模块为例: re.match("p","python") ,字符串"p"会在内部先转换为正则表达式对象(Pattern),然后再与字符串"python"进行匹配,需要注意的是正则表达式匹配的是整个字符串,而不是进行包含匹配,所以尽管"python"匹配到了第一个字符p,但由于后面还有字符,故匹配失败返回False。为了简化使用,大部分的需要用到正则表达式的函数(split、replace),都不需要程序员自己先去定义一个Pattern对象(Pattern对象自己也有许多方法,高效匹配),而只需将正则表达式字符串作为参数传递给函数就可以了,字符串转正则表达式对象的过程在函数内部完成。所以,正则表达式不是字符串。
二、常见正则表达式符号
. 通配符,匹配任何一个字符
* 允许模式重复0次或多次
+ 允许模式重复一次或多次(至少重复一次)
{m,n} 允许模式重复m~n次
| 选择符,选择匹配其中的一个,如'p(ython|erl)'
? 重复前面的内容0次或一次
[] 字符集,可以匹配字符集里面的任意一个字符,如[^a-z]
$ 匹配字符串的结束位置
^ 匹配字符串的开始位置
\d 匹配一个数字字符(0~9),\D表示非数字(通常大小写意义相反)
\b 匹配一个单词边界,如"s\b"可以匹配"thanks"中的"s"而不能匹配"ask"中的"s"
\s 匹配任何一个非空白字符
\w 匹配包括任何一个包括下划线的单词字符,等价于[a-zA-Z0-9_]
三、关于转义符
在ASCII字符集中,有一些字符并不能直接显示,如换行符、回车符、制表符等,因而在字符串中,我们需要借助反斜杠"\"加字母的形式来显示告诉人们此处是一个什么字符,即字符串转义符。然而,正则表达式某些字符也有其特殊含义,如”.“就是匹配任意一个字符,如果我们想匹配的就是符号"."呢?我们就需要借助正则表达式转义符了,以书写匹配网址的正则表达式为例:
首先我们需要根据要匹配的内容写出正则表达式,由于里面包含有正则表达式的特殊字符通配符.,它意味着此处可以匹配任意一个字符,而实际我们只是想匹配一个符号.,所以我们需要借助正则表达式转义符对其进行转义\. ,这样我们就的得到了我们想要的正则表达式。接着我们再将正则表达式转换为字符串,由于www\.(.+)\.com包含有对于字符串来说具有特殊意义的字符"\",我们怎么能区分这是符号”\“还是转义符”\”,所以我们需要在"\"前面再加上一个字符串转义符“\\”。总之,字符串和正则表达式都有转义符,在书写正则表达式字符串一定要区分清楚。
四、贪婪与非贪婪
对于上面的正则表达式,如果我们想用来字符串做替换,比如我们想替换"www.first.comwww.second.com"中的www.second.com和www.second.com
可以看到,整个字符串被直接替代了,只输出了一个‘$’,而不是分别替换。原因在于正则表达式中的重复运算符+默认是贪婪的,它会进行尽可能多的匹配。如果想分别替换,只需要在重复运算符后面加上?,这样它就会进行尽可能少的匹配,即非贪婪模式。
- 正则表达式 学习笔记(一)
- 正则表达式学习笔记(一)
- 正则表达式学习笔记(一)
- java正则表达式学习笔记(一)
- PHP正则表达式学习笔记(一)
- 正则表达式学习笔记(一)
- 正则表达式 学习笔记(一)
- 正则表达式学习笔记(一)
- 正则表达式学习笔记(一)
- 正则表达式学习笔记(一)
- delphi正则表达式学习笔记(一)
- Linux-正则表达式 学习笔记(一)
- 【学习笔记】正则表达式(一)
- 正则表达式学习笔记(一)
- 正则表达式学习笔记 一
- 正则表达式学习笔记一
- 正则表达式学习笔记一
- 正则表达式笔记(一)
- Hdoj 4496 D-City 【并查集】
- Discrimination Models , Generative Models and Naive Bayes
- 第八周【项目1-实现复数类中的运算符重载】
- SQL学习记录2 创建和使用数据库(weiwancheng)
- zoj 4704 Unrequited Love 贪心 孤独者
- 正则表达式学习笔记(一)
- 算法导论笔记:08线性排序
- PythonChallenge第6题
- Java 中的 static 使用之静态方法
- HDU 2010
- java数组的定义
- 电信141p122第16题
- 作业
- jquery uploadify 上传控件ASP.NET使用总结