`
wkf41068
  • 浏览: 458252 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
正则表达式: 回溯应用<前后一致匹配>
子表达式回顾:子表达式即把一组字符编组为一个字符集合
1. 这样的字符集合主要用于精确设定需要重复匹配的文本及其重复次数。
2  用于回溯引用

实例一: 假设有下面以文本内容:

<h1>魔兽世界</h1>
<ul><a href="http://zhanhun.uuu9.com/hd/zhanhun0927.html">斩魂</a>
	<li>单机游戏</li>
</ul>
<h1>植物大战僵尸</h2>
<h3>小游戏</a></h3>
<td>愤怒的小鸟</td>

现在要找出所有标题文字,不管其实多少级。

如是很容易想到如下的正则模式: [hH][1-6].*?[hH][1-6]  初看没有任何问题,但是匹配发现结果如下:

<h1>植物大战僵尸</h2>
<h3>小游戏</a></h3>
<h1>魔兽世界</h1>

上面的结果中很显然你会发现有一个非法的标题进入(<h1>植物大战僵尸</h2>),应该是被过滤掉的。

出现这种情况的根源在第二部分<用来匹配结束标签的那个部分>对这个模式的第一部分<用来匹配开始标签的那个部分>毫无所知。 要想解决这样在此只能依靠

回溯引用了。



第二个实例: 找出一文本中所有连续重复出现的单词找出来。很明显,在搜索某个单词的第二次出现时,这个单词必须是已知的。

回溯匹配引用容许正则表达式模式引用前面的匹配结果。

文本内容: I will  wait wati for you you at airport tonight at five sharp sharp o'clock.

正则表达式模式: []+(\w+)[]+\1

上面的模式找到了所想要的东西,如何做到的呢?

[]+ 匹配一个或多个空格, \w+匹配一个或多个字母数字字符,[]+匹配随后的空格。

注意: \w+是在()里面的,它是一个子表达式。 这个子表达式不是用来进行重复匹配的,这里根本不涉及重复匹配的问题。 

这个子表达式只是把整个模式的一部分单独划分出来一边在后面引用。

这个模式最后的部分是\1;这是一个回溯引用,而他引用的正事前面火焚出来的那个子表达式:当(\w+)匹配但wati 的时候,\1也匹配单词wait;....



注意: 回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。 \1代表这模式里的第一个子表达式;\2代表这第二个子表达式...


通过实例二,可以回想实例一的解决办法:<([hH][1-6])>.*?</\1>   或者<[hH]([1-6]).*?</[hH]\1>

特别提醒: 不同的正则表达式在实现回溯引用的语法方面往往有这巨大的差异。
分享到:
评论

相关推荐

    正则表达式调试工具

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索替换和文本处理等领域。正则表达式调试工具是开发人员用来测试和优化这些模式的重要辅助工具。本文将...

    C语言正则表达式库

    3. **回溯算法**:PCRE库使用了高效的回溯算法来执行正则表达式匹配。虽然这可能会导致性能问题,但通过优化的匹配引擎和使用预编译模式,可以显著提高效率。 4. **匹配选项**:提供了许多可配置的匹配选项,例如不...

    正则表达式素材5

    正则表达式是计算机科学中的一个重要概念,广泛应用于文本处理、数据验证、搜索与替换等多个领域。本资源包“正则表达式素材5”聚焦于正则表达式的入门学习,结合了经典教材《正则表达式入门经典》的扫描版和其他...

    正则表达式宝典,强力推荐

    5. **分组与回溯引用**:讨论如何通过分组捕获多个匹配项,并在后续表达式中使用回溯引用进行复杂的模式匹配。 6. **零宽断言**:介绍如"lookahead"(前瞻断言)和"lookbehind"(后顾断言)这样的高级特性,它们...

    正则表达式教材资料合集

    正则表达式,简称为正则或regex,是用于匹配字符串模式的一种语言,广泛应用于文本处理、数据验证、搜索和替换等场景。在IT行业中,掌握正则表达式是提高工作效率的重要技能之一,无论是编程、数据分析还是网页爬虫...

    正则表达式中文学习手册

    6. **回溯与效率**:理解正则表达式的回溯机制,避免编写可能导致大量回溯的表达式,以提高性能。 7. **正则表达式引擎**:了解不同的正则引擎(如贪婪与非贪婪、DFA与NFA)的区别及其在不同编程语言中的实现。 8....

    精通正则表达式&正则表达式经典实例

    通过《精通正则表达式》这本书,你可以深入理解正则表达式的内部机制,学习高级特性如回溯、后向引用和递归等。而《正则表达式经典实例》则提供了大量实用示例,帮助你在实践中巩固所学,解决实际问题。 学习并掌握...

    正则表达式 必知必会 pdf

    本书基于各种实用场景,从基础的文本匹配开始,逐步深入到回溯引用、条件性求值以及前后查找等高级特性,使得读者能够系统、全面地掌握正则表达式的使用方法,并将其应用于解决实际问题中。 书中介绍的正则表达式...

    精通正则表达式(第3版).pdf

    5. 回溯引用:回溯引用允许我们在正则表达式中使用之前已经匹配的子表达式,通常通过反斜杠后跟数字来实现。 6. 非捕获组:非捕获组用来指定一个组,但是不需要捕获它用于后续的引用,通常通过(?:pattern)来表示...

    正则表达式C语言源码

    PCRE库不仅支持基本的正则表达式操作,如字符匹配、重复、选择等,还提供了高级特性,如回溯、后向引用、条件分支等。 在C语言中,使用PCRE库通常涉及以下几个步骤: 1. **头文件引入**:在C代码中,首先需要包含...

    .net正则表达式测试工具

    在编程领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,广泛应用于数据验证、字符串搜索与替换等多个场景。.NET框架提供了丰富的正则表达式支持,而".NET正则表达式测试工具"正是...

    java .net 正则表达式调试器

    “Java .NET 正则表达式调试器”的核心功能在于其可视化界面,它允许用户输入待匹配的字符串和正则表达式,然后通过步骤回溯的方式展示匹配过程。在调试过程中,用户可以清晰地看到每个字符如何与正则表达式中的各个...

    各类正则表达式详细手册

    同时,C#的捕获组可以方便地获取匹配结果,并支持回溯引用(\1、\2等)。 这三份手册将详细介绍每种语言环境下正则表达式的语法、使用示例以及常见问题解决策略。对于初学者,它们提供了基础概念和语法讲解;对于有...

    经典的正则比对工具

    - **回溯**:当正则表达式无法匹配时,它会尝试回溯到之前的匹配状态,寻找其他可能的匹配方式。 - **零宽度断言**:不消耗字符的匹配,如 `(?=pattern)` 是前瞻肯定,`(?!pattern)` 是前瞻否定。 - **模式修饰符...

    精通正则表达式.pdf

    - 括号(()`)用于创建分组,可以捕获子匹配并进行回溯引用,如 `(abc)` 可以通过 `\1` 引用。 - 非捕获组 `(?:...)` 不存储捕获信息,仅用于逻辑分组。 5. 零宽度断言: - `^` 在字符串开头,`$` 在字符串结尾...

    正则指引 完整带书签

    7. **回溯与效率优化**:理解正则引擎的回溯机制,以及如何通过避免贪婪匹配和使用非捕获组来提高性能。 8. **正则表达式引擎差异**:不同的编程语言和环境可能对正则表达式的支持程度不同,书中会讲解各种常见环境...

    正则表达式培训演讲(内部材料)

    `C#正则表达式整理备忘.htm`和`C#正则表达式.htm`很可能是培训资料的核心部分,可能包含正则表达式的语法、特殊字符、预定义字符类、量词、分组、捕获、反向引用、零宽度断言以及自定义的正向和反向查找等内容。...

    正则表达式素材4

    学习正则表达式不仅可以提升你在编程中的文本处理能力,还可以帮助你在日常工作中快速查找和替换特定模式,例如在大型文档中搜索特定信息、验证用户输入的格式正确性等。熟练掌握正则表达式,可以显著提高工作效率,...

Global site tag (gtag.js) - Google Analytics