Chinaunix首页 | 论坛 | 博客
  • 博客访问: 127292
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -15
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-03 22:22
个人简介

小楼一夜听春雨

文章分类
文章存档

2017年(1)

2016年(2)

2015年(5)

2014年(21)

2013年(5)

2012年(7)

2010年(6)

2009年(2)

我的朋友

分类: C/C++

2012-05-07 15:25:19

正则表达式的形式定义
  称R是一个正则表达式,如果R是
  1) a,这里a是字母表E中的一个元素
  2) 长度为0的串集
  3) 空串集
  4) (R1 | R2),这里R1和R2是正则表达式
  5) (R1R2),这里R1和R2是正则表达式
  6) R*,这里R是正则表达式

  注:a其实是{a}, 代表一个集合

正则表达式描述的是什么
  从其形式化定义中可以看出,正则表达式实际描述的是一个在给定字母表上的字符串集合。当然该集合包含长度为0的串集及空串集。

形成SET的三种方式
  1、两个SET的并
  2、一个SET中的任意串与另一个串中的任意串连接成新串,再把这些新串整合成一个新的SET
  3、一个SET中任意number个串连接成新串,再把这些新串整合成一个新的SET

实际应用中的正则表达式
  实际应用中,正则表达式多用简写,下表描述了简写的展开说明
  简写        展开
  匹配单个字符
  .           字符表的所有字符的集合
  [...]       列出的字符集合
  [^...]      列出的字符集合的补集
  \char       转义字符

  提供计数功能
  +           让一个表达式出现1次或多次
  ?           让一个表达式出现0次或1次
  {min,max}   让一个表达式出现至少min次最多max次
 
  匹配位置
  ^           匹配一行的开头
  $           匹配一行的结束
  \<          匹配一个单词的开始
  \>          匹配一个单词的结束
  注:位置实际上是可以转化的标准的正则表达式的,如一个单词的开始可以用一个空格加一个字母来表示。

  其它
  \1 \2...    反向引用,匹配之前第1,第2组括号内表达式匹配的文本
  注:这其实已经超出了正规正则表达式的描述能力,但由于其实用性,还是被加入了表达式
  ()          可用于改变优先级或者捕获
  (?:)        用于分组而不捕获

实际应用中都是怎么使用正则表达式的
  一般都是给定一个字符流,然后你指定一个正则表达式,你可以进行的操作有,查找,插入或替换,实际上插入可以归结为对位置的替换。

一些附加的参数
  这些附加的参数不是正则表达式的一部分,但它能影响表达式的意义或对操作产生影响
  i:忽略大小写

实际应用步骤
  在使用正则表达式进行工作时,首先是正确地描述出你所要描述的串集,就是一定要保持正确性。
  其次,简化它,用语言提供的简化串进行简化,简化的前提是能够提高表达式的可读性。再次,如果效率是很重要的,则使用优化技巧进行优化,否则不要做无谓的工作。

正则表达式中出现字符的分类
  正则表达式中出现的字符功用有两类,一类是可以转化成标准正则表达式,另一类则是与操作相关的,如忽略优先量词中的?,它决定了匹配时是否贪婪,而它却不影响正则表达式匹配的字符集。

提取网页标题:(?<=\s*)(\S|\S.*\S)?(?=\s*)
阅读(1193) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~