做日志分析工作的经常需要跟成千上万的日志条目打交道,为了在庞大的数据量中找到特定模式的数据,常常需要编写很多复杂的正则表达式。例如枚举出日志文件中不包含某个特定字符串的条目,找出不以某个特定字符串打头的条目,等等。
正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为。需要注意一点,正则表
达式中的前和后和我们一般理解的前后有点不同。一段文本,我们一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。但是对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”,因为这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,因为正则引擎已经走过了那一块地方。
所谓的前瞻就是在正则表达式匹配到某个字符的时候,往“尚未解析过的文本”预先看一下,看是不是符合/不符合匹配模式,而后顾,就是在正则引擎已经匹配过的文本看看是不是符合/不符合匹配模式。符合和不符合特定匹配模式我们又称为肯定式匹配和否定式匹配
。
现代高级正则表达式引擎一般都支持都支持前瞻,对于后顾支持并不是很广泛,因此我们这里采用否定式前瞻来实现我们的需求。
第一个分组啥都没有匹配到,而第二个分组却匹配了整个字符串。再回过头来好好分析一下刚才那个正则表达式。实际上,当正则引擎解析到A区域的时候,就已经
开始执行B区域的前瞻工作。这个时候发现当A区域为Null的时候匹配成功——.*本来就允许匹配空字符,前瞻条件又满足,A区域后面紧跟着的是
“2009”字符串,而并不是robots。因此整个匹配过程成功匹配到所有条目。
将.*?移入前瞻表达式
分享到:
相关推荐
### PHP常用正则知识点 ...在实际应用中,可以根据具体场景调整正则表达式的细节以满足特定的需求。同时,在编写正则表达式时,需要注意其复杂度与性能之间的平衡,避免过于复杂的正则表达式导致效率降低。
在PHP中,正则表达式是一种强大的文本处理工具,它能帮助我们匹配、查找、替换或提取特定模式的字符串。...通过熟练掌握否定前瞻和否定后瞻,我们可以编写出更精确的正则表达式,以满足各种复杂的文本处理任务。
负向前瞻和后顾** 正向前瞻`(?=pattern)`确保匹配的位置后面跟着`pattern`,而负向前瞻`(?!pattern)`则确保后面不跟`pattern`。后顾`(?)`和负向后顾`(?<!pattern)`则是检查前面是否匹配`pattern`。 **7. 使用PHP...
正则表达式在编程和文本处理领域有着极其广泛的应用,因此成为了IT专业人士必备的技能之一。 在《精通正则表达式_第三版(高清版)》一书中,作者深入探讨了正则表达式的各种特性和流派,为读者揭示了正则表达式的...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它由特殊字符(称为元字符)和普通字符组成,可以用来描述一系列的字符模式。在编程语言和许多文本编辑器中,正则表达式是不可或缺的一部分...
在PHP中,正则表达式被广泛应用于数据验证、文本搜索与替换等场景。本教程将深入浅出地介绍正则表达式的基本概念、语法以及在PHP中的应用。 一、正则表达式基础 1. 元字符:元字符是具有特殊含义的字符,如`.`匹配...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一套特殊的语法来描述字符串模式,广泛应用于编程语言、文本编辑器、搜索引擎和各种文本处理工具中。以下是对"正则表达式学习应用...
- **语法支持**:某些语言可能支持更高级的语法特性,如前瞻、后瞻等。 - **性能优化**:不同语言内部对正则表达式的实现可能存在差异,这可能会影响其执行效率。 - **兼容性问题**:某些正则表达式的语法在某些环境...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在这个“正则表达式”学习笔记中,我们将深入探讨这一强大的工具。 1. **基础概念** ...
零宽断言包括零宽正向前瞻、零宽正向后顾、零宽负向前瞻和零宽负向后顾断言,它们在不消耗字符的情况下进行匹配检测。 零宽正向前瞻断言(positive lookahead)的格式为(?=exp),它断言所要匹配的字符或者子字符串...
PHP正则表达式是编程语言PHP中用于处理字符串的强大工具,它主要应用于字符串的模式匹配、分割、查找和替换操作。正则表达式虽然在某些简单场景下可能效率不高,但通过熟练掌握其使用技巧,可以极大地提升字符串处理...
=)` 和后顾断言 `(?!)` 分别用于检查某部分模式之后或之前是否存在其他模式,但不会消耗任何字符,常用于复杂条件下的模式匹配。 ##### 3.2 修饰符的作用 修饰符如 `/i` (忽略大小写)、`/m` (多行模式)、`/s` ...
除了上述的PHP正则表达式基础和如何应用它们来解析多重循环模板,本文还提到了一些正则表达式在线测试工具和生成工具的链接。这些工具有助于开发者在编码之前测试和调整他们的正则表达式。比如,通过在线工具,...
)`**:正向和负向前瞻/后瞻。 - 口诀:“只远仁 世 玉子 (?=ing\b) 定 ing 前 字”。 - 示例:`\b\w+(?=ing\b)` 匹配以“ing”结尾的单词前的部分。 - 口诀:“只远仁 世 玉子 (?)\w+\b 定 sub 前 字”。 - 示例...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在这个“常用正则表达式集合”中,你可能会找到许多实用的模板,帮助你在处理字符串时...
2. 正则表达式技巧:这里可能会介绍一些高级使用技巧,比如如何使用反向引用、如何进行分组和捕获、使用前瞻和后顾断言、利用非贪婪匹配等。正则表达式技巧的学习可以帮助用户编写出更加复杂和精确的匹配规则,处理...
总的来说,PCRE是一种强大且灵活的文本处理工具,通过理解和熟练运用,可以解决许多复杂的数据处理和文本分析问题。但需要注意,正则表达式有时也会变得非常复杂,理解和调试它们可能需要一定的技巧和经验。