黑马程序员-day4-正则表达式之回溯引用
来源:互联网 发布:学而后知不足的下一句 编辑:程序博客网 时间:2024/05/21 17:34
------------- Windows phone 手机开发 、ASP .NET培训、期待与您交流!----------------
最近学习了下正则表达式,觉得它是一门挺强大的技术,如果有人对正则表达式不是很了解,但是想学习它的知识的,我推荐一本好书《正则表达式必知必会》,这本书浅显易懂,适合新手阅读。
正则表达式起源于1950年代在数学领域的一些研究工作。几年之后,计算机领域借鉴那些研究工作的成果和思路开发了Unix世界里的Perl语言和grep等工具程序。在许多年里,正则表达式只流行语Unix平台,但是这种情况早已发生了变化,现在几乎所有的计算机平台都支持正则表达式,只是具体方式和具体程度有差异而已。
讲解一个例子大家就知道回溯引用是什么了,
文本:
<body><H1>Welcome to my Homepage</H1>Content is divied into two sections:<BR><H2>ColdFusion</H2>Information about Macromedia ColdFusion.<H2>Wireless</H2>Information ablout Bluetooh,802.11,and more</body>正则表达式:<[hH]1>.*</[hH]1>
结果:<H1>Welcome to my Homepage</H1>
分析:模式<[hH]1>.*</[hH]1>只能匹配一级标题
如果用正则表达式:<hH[1-6]>.*?</[hH][1-6]>
结果:<H1>Welcome to my Homepage</H1>
<H2>ColdFusion</H2>
<H2>Wireless</H2>
<H2>Wireless</H2>
分析:<hH[1-6]>匹配任何一级标题的开始标题,</[hH][1-6]>匹配任一标题的结束标签。
现在这个<hH[1-6]>.*?</[hH][1-6]>正则表达式成功了吗?
文本:
<body><H1>Welcome to my Homepage</H1>Content is divied into two sections:<BR><H2>ColdFusion</H2>Information about Macromedia ColdFusion.<H2>Wireless</H3>Information ablout Bluetooh,802.11,and more</body>
正则表达式:<hH[1-6]>.*?</[hH][1-6]>
结果:<H1>Welcome to my Homepage</H1>
<H2>ColdFusion</H2>
<H2>Wireless</H2>
<H2>Wireless</H3>
分析:显然其中一个标题以<H2>开头、以</H3>结尾的,不是一个合法的标题,但是<hH[1-6]>.*?</[hH][1-6]>却匹配了这个标题,要解决这个问题,就只能求助与回溯引用。
假如你有一段文本,你想吧这段文本中连续重复出现的单词找出来。显然,在搜索某个单词,第二次出现时,这个单词必需是已知的。
回溯引用允许正则表达式模式引用前面的匹配结果。
文本:
This is block of text,Several words here are areRepeated,and and theyShould not be.正则表达式:[ ]+(\w+)[ ]+\1
结果:are are
and and
分析:[ ]+匹配一个或多个空格,\w+匹配一个或多个字母数字字符,\1是一个回溯引用,它引用的正是前面划分出来的那个子表达式
注意:回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式
文本:<body>
<H1>Welcome to my Homepage</H1>Content is divied into two sections:<BR><H2>ColdFusion</H2>Information about Macromedia ColdFusion.<H2>Wireless</H3>Information ablout Bluetooh,802.11,and more</body>正则表达式:<hH([1-6])>.*?</[hH]\1>
结果:<H1>Welcome to my Homepage</H1>
<H2>ColdFusion</H2>
分析:找到了2个匹配,用(和)把[1-6]括起来,使它成为一个子表达式,这样一来,就可以用</[hH]\1>中的\1引用这个子表达式了,子表达式([1-6])匹配数字1-6,\1只匹配与之相同的数字。这样<H2>Wireless</H3>就不会被匹配了。
\1到底代表着什么?它代表模式中的第一个子表达式,\2代表着第二个子表达式,\3代表着第三个子表达式,以此类推。
------------- Windows phone 手机开发 、ASP .NET培训、期待与您交流!----------------
- 黑马程序员-day4-正则表达式之回溯引用
- 黑马程序员之正则表达式
- 黑马程序员之正则表达式
- 黑马程序员之正则表达式
- 正则表达式知识详解之回溯引用 (java版示例)
- 正则表达式--子表达式及回溯引用
- "黑马程序员"学习笔记之正则表达式
- 黑马程序员---java基础之正则表达式
- 黑马程序员----JAVA基础之正则表达式
- 黑马程序员--java 之 正则表达式
- 黑马程序员<梦想之旅>正则表达式
- <<黑马程序员>>java基础之正则表达式
- 黑马程序员----JAVASE之正则表达式
- 黑马程序员之学习正则表达式
- 黑马程序员技术博客之正则表达式
- 黑马程序员之Java--正则表达式
- 黑马程序员-java基础之正则表达式
- 黑马程序员 Java基础之正则表达式
- 信息就是位+上下文 读深入理解计算机系统
- 正态分布(Normal distribution)又名高斯分布(Gaussian distribution)
- 解剖linux内核之文件系统
- c++单例模式
- Lucene二次搜索
- 黑马程序员-day4-正则表达式之回溯引用
- 防盗链
- 排序
- 项目总结
- platform的那些事儿
- asmack实现获取好友列表 添加好友 搜索好友
- 给树控件添加右键菜单
- 存储过程的一些积累
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组