免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2808 | 回复: 0
打印 上一主题 下一主题

正则表达式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-20 09:25 |只看该作者 |倒序浏览

2.匹配单个字符
A. 匹配会返回多个结果,包括位置 和长度 。

B.. 是特殊字符 ,代表 可以匹配任何一个单个字符,通过\ 可以实现转义。.其实一般不包括 。

C. 正则表达式 给出的仅仅是模式(pattern) ,得到的返回是一个与该模式匹配的字符串

3. 匹配一组字符
[]  是用来定义一个字符集合的元字符。
能获得预期的匹配结果并不困难,困难的是不会匹配到你不想要的东西。
在[]内可以使用 - 作为区间字符。在同一个字符集合里可以给出多个字符区间。例如 A-Z 0-9 a-z A-F. 在[]之外,-并不是元字符。

取非匹配 ^ 来否定集合内所有的文字。



4. 特殊字符的元字符
A. 转义字符 \

B. 空白字符匹配 \n \r \f \t [\b]回退字符

C. 代表字符类 的元字符
\d [0-9]
\D [^0-9]
\w 任何一个字母数字或下划线
\W 任何一个非字母数字非下划线字符
\s 任何一个空白字符 不包括[\b]
\S 任何一个非空白字符

正则表达式很少有对错之分,前提是它们能解决问题。更精确 的匹配需要构造更复杂 的表达式。



5. 重复匹配(数量匹配)
A. 匹配一个或多个字符(字符集)使用元字符 + 做后缀
表示匹配一个或多个字符,至少一个,不匹配0个。在[]里面一般不用转义。甚至.在[]也将被解释为普通字符。

B. 匹配0个或多个字符(字符集)使用元字符 * 做后缀
表示0次或多次重复出现。

C. 匹配0个或1个字符(字符集)使用元字符 ? 做后缀
表示0次或1次出现,最多不超过一次。

有些人喜欢把一个字符也定义成一个集合,这么做的好处是可以增加可读性和避免产生误解,使人可以一眼看出哪个字符与哪个元字符相关关联

D. 匹配的重复次数。使用元字符 {}做后缀,把数值写在他们之间。
可以设置最大值,可以设置最小值,可以设置精确的数字和区间
{3} 定义重复3次
{2,4} {0, 3} , ?等价于{0, 1}
{3, } 匹配最小的重复次数,而不设定最大值。但小心别遗漏了{}里面的逗号。

E. 防止过度匹配(贪婪型和懒惰型)
*和+都是贪婪型元字符,匹配模式时总是多多益善 而不是适可而止 ,而不是碰到第一个匹配为止。
在这些元字符的后再加上元字符?,即成为懒惰型版本。
{}后面也可以加?

6. 位置(边界)匹配
边界: 在什么地方进行字符串匹配操作。使用边界限定符

A. \b用来匹配一个单词的开始或者结尾。 \b匹配这样一个位置,位于字母和非字母之间 。
\b只匹配位置,不匹配任何字符,也就是匹配到的串的长度不会包括\b.

\B 字母之间 或非字母与非字母 之间 。

B. 字符串边界
^和$

7. 使用子表达式
子表达式是一个更大的表达式的一部分,划分出来的目的是为了把子表达式作为一个独立的元素 来使用。
子表达式用() 括起来。用途:1. 重复(数量)匹配 2. 回溯引用
例如( ){2,}    (19|20)\d{2} 对OR操作符做出准确的定义

子表达式允许嵌套 。
嵌套时,关键在于分解开,按照先内后外的原则,而不是从第一个字符开始(从核心开始)。
逻辑思维能力是使用正则表达式的关键。

牢牢记住 : 把必须匹配的情况 考虑周全并写出一个匹配结果符合预期的正则表达式很容易,但把不需要匹配的情况 也考虑周全并确保它们都将被排除在匹配结果以外往往要困难的多。

8. 回溯引用(Backreference)
A. 作用: 让模式的后续 匹配部分了解前面 子表达式的匹配结果。或者说在模式内部引用 前面的子表达式。

B. 使用 \1 来引用子表达式,一般从1开始计数,\0一般是整个表达式,但各个语言的实现会有较大差异。

C. 回溯引用在替换操作中的作用
替换时需要两个正则表达式:一个用来给出搜索模式 ,另一个用来给出匹配文本的替换模式 。
回溯引用可跨模式 使用,一般放在$1 这样的变量中。

把文本分解成多个子表达式的做法在替换是可以做出更精确的控制。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/23363/showart_2154255.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP