首页 > 其他 > 详细

正则表达式笔记

时间:2014-10-26 19:41:57      阅读:297      评论:0      收藏:0      [点我收藏+]
1.入门
1.1什么是正则表达式
1.2正则表达式能干些什么
1.3如何使用
 
2.匹配
2.1纯文本匹配
2.2特殊字符匹配
 
3.高级应用
3.1回溯引用
3.2条件分支
 
4.几个正则表达式实例
 
1.入门
 
1.1什么是正则表达式
简单的说正则表达式是一些用来匹配和处理文本的字符串。它有其特殊的语法和指令,但并不是完备
的程序设计语言。它是处理分本流最强大的工具之一。
 
1.2正则表达式能干些什么
a)在文本文件中匹配特定的字符或字符串
b)生成特定的格式的代码,比如说html中的链接
c)检查某些格式?正确性,比如说电子邮件格式
d)在文本文件中需要进行替换
正则表达式的最基本作用就是查找和替换,在平时的使用过程中经常会碰到需要正则表达式来解决这
两个问题,比如使用grep系列的命令匹配字符串,在emacs中使用正则表达式替换等等。
 
1.3如何使用
首先需要明确,不存在正则表达式程序,它只不过是在某些编程语言或开发工具中的具体实现而已,
所以,在使用正则表达式之前,必须保证你的工具或语言拥有解释正则表达式的引擎。同时要注意,
在不同语言,和不同工具中正则表达式的引擎会有所不同。在使用正则表达式时,一个问题通常会
有很多解决方案,没有具体的对错之分。
 
 
2.匹配
 
2.1纯文本匹配
在linux下有很多正则表达式测试工具,比如可以直接使用grep,shell中也内嵌正则表达式,emacs
更是使用正则表达式的最佳战场,也有专门的正则表达式学习工具,比如说kiki等。这里以kiki为例来
学习。
 
文本
hello,i am a boy,i love CS
now,i am learning linux kernel
my homepage is http://elvalad.wordpress.com
 
正则表达式
linux
 
结果
now,i am learning (linux) kernel
 
这是最简单的正则匹配,而正则表达式的功能远非如此。
 
2.2特殊字符匹配
前面的静态纯文本根本无法体现正则表达式的强大,下面一些例子更加实用。
在正则表达式中有些字符具有特殊含义,这些特殊字符我们一般称之为元字符,
下面是一些常用的元字符:
------------------------------------------------------
元字符  | 含义   
------------------------------------------------------
[]     |字符集合,至少匹配集合中的一个字符
------------------------------------------------------
[^]    |对字符集合求非
------------------------------------------------------
\      |转义字符
------------------------------------------------------
\b     |回退符(匹配单词边界)
------------------------------------------------------
\B     |不匹配单词边界
------------------------------------------------------
\f     |换页符
------------------------------------------------------
\n     |换行符
------------------------------------------------------
\r     |回车符
------------------------------------------------------
\t     |制表符
------------------------------------------------------
\v     |垂直制表符
------------------------------------------------------
\d     |任意单个数字
------------------------------------------------------
\D     |任意非数字单个字符
------------------------------------------------------
.      |除换行符以外的任意字符
------------------------------------------------------
\w     |等价于[a-zA-Z0-9_]
------------------------------------------------------
\W     |等价于[^a-zA-Z0-9_]
------------------------------------------------------
\s     |等价于[\f\n\r\t\v]
------------------------------------------------------
\S     |等价于[^\f\n\r\t\v]
------------------------------------------------------
\x     |匹配十六进制数
------------------------------------------------------
\0     |匹配八进制数
------------------------------------------------------
+      |匹配一个或多个字符集合
------------------------------------------------------
*      |匹配0个或多个字符集合
------------------------------------------------------
?      |撇配0个或1个字符
------------------------------------------------------
{}     |重复匹配
------------------------------------------------------
\<     |只匹配单词的开头(很多工具不支持)
------------------------------------------------------
\>     |只匹配单词的结尾(很多工具不支持)
------------------------------------------------------
^      |匹配字符串的开始
------------------------------------------------------
$      |匹配字符串的结束
------------------------------------------------------
()     |子表达式
------------------------------------------------------
?=     |向前查找,查找出现在匹配文本之后的内容
------------------------------------------------------
?<=    |向后查找,查找出现在匹配文本之前的内容
------------------------------------------------------
|      |逻辑或操作
------------------------------------------------------
\E     |结束\L或\U转换
------------------------------------------------------
\L     |把后面的字符转换为小写直到遇到\E
------------------------------------------------------
\l     |把下一个字符转换为小写
------------------------------------------------------
\U     |把下一个字符转换为大写直到遇到\E
------------------------------------------------------
\u     |把下一个字符转换为大写
------------------------------------------------------
------------------------------------------------------
3.高级应用
 
3.1回溯引用
回溯引用是指模式的后半部分引用用在前半部分中定义的子表达式。
\1为第一个子表达式,\2为第二个子表达式依次类推。
一个回溯的例子:要求匹配出文本中连续出现的单词
 
文本:
hello hello world
bye bye
small is is beautiful
 
正则表达式:
(\w+)[ ]+\1
 
注意:回溯引用只能用来引用模式中的子表达式,回溯引用一般以\1代表第一个
子表达式,而以\0代表整个正则表达式。
 
3.2条件分支
正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,
具体方法是用|把不同的规则分隔开。
 
例子:
0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种
是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)
 
注意:使用分枝条件时,要注意各个条件的顺序,原因是匹配分枝条件时,将会从左到右地
测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。
 
4.几个正则表达式实例
 
URL地址:
 
https?://[-\w.]+(:\d+)?(/([\w/_.]*)?)?
 
IP地址:
 
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
 
电子邮件地址:
 
(\w+\.)*\w+@(\w+\.)+[A-Za-z]+
 
HTML注释:
 
//.*
 
正则表达式的学习需要每天多加练习,包括在平时使用emacs,grep时都是练习的最佳时机。

正则表达式笔记

原文:http://www.cnblogs.com/elvalad/p/4052583.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!