现在来谈谈正则表达式的一些细节的问题。
一.先来谈谈匹配模式
1.不区分大小写的匹配模式
2.宽松的排列和注释模式
3.点号通配模式也叫单行模式
4.增强的行锚点模式也叫多行模式
5.文本模式
1.不区分大小写,在各个语言中的表示方法都不一样,但是原理是一样的。如常用 (?i)表示不区分大小写的开头,用(?-i)表示不区分大小写的结尾。如 (?i)very(?-i)good 来匹配 verygood 是能成功的,来匹配VErygood也是能常用的。这一点很简单,相信大家都能明白。我要说的一点是,当只有(?i),没有有(?-i)符号是,表达式匹配一样字符的结尾,也就是哪一样都不区分大小写。常能改变一些元字符的匹配规则。对于不同的语言,可能一些封装不一样。如java.util.regex中,用Pattern.CASE_INSENSITIVE,来表示不区分大小写格式。
2.宽松的排列和注释模式,常用(?x),宽松的注释模式。在此不作详细介绍。
3.点号通配模式也叫单行模式,指的是.号的匹配方式,它在通常情况下只能匹配换行符之前的位置。不能进行多行的匹配。若使用单行模式,能匹配多行的情况。包括换行符。(?s)常用的匹配字符。
4. 增强的行锚点模式也叫多行模式(?m)。
锚点^匹配需要搜索的文本起始位置, 如果使用增强的行锚点匹配模式,它还能匹配每个换行符之后的位置。在某些系统中,增强谋士下,^还能匹配Unicode的终结符。
\A 总是能够匹配待搜索文本的起始位置。
\Z 通常是字符串的末尾位置,或者在字符串末尾的换行符之前的位置。
\z 总是匹配字符串末尾
5.文本模式 \Q……\E,把其中的字符全部当做文本来处理。注意java.util.regex中只在1.6(含)之后的版本起作用。
模式对于正则表达式的匹配有很到的影响。常常会改变正则表达式员字符的匹配规则。
二、写正则表达式的设计原则:
1. 只匹配期望的文本,排除不期望的文本。
2. 必须易于控制和理解
3. 如果使用NFA引擎,必须保证效率。
三、常见的几个正则表达式。
1. 匹配多行文本 ^\w+=([^\n\\] | \\.)* 其中的 \\.能匹配反斜线加换行符的结合体
2 匹配IP地址的每一段的数字:[01]?\d\d? | 2[0-4]\d | 25[0-5] 完整的匹配字符:
(?<![\w.])([01]?\d\d? | 2[0-4]\d | 25[0-5] )\.([01]?\d\d? | 2[0-4]\d | 25[0-5] )\.([01]?\d\d? | 2[0-4]\d | 25[0-5] )\.([01]?\d\d? | 2[0-4]\d | 25[0-5] )(?![\w.])
3. 匹配对称的括号:\([^()]*\)从一个开括号到最近的闭括号,但是不容许其中包含开括号
4. 匹配一个数:^-?([0-9]+(\.[0-9]*)? | \.[0-9]+)$
5. 去除文本首尾的空白字符perl语言实现:s/^\s*((?:.*\S)?)\s*$ /$1 /s 简单解释一下perl中s/ a/b /s是替换结构,把a替换成b结尾的s是不区分大小写,也就是前面提到的不区分大小写模式。
还有其中的$1是指的是((?:.*\S)?),它是正则表达式中的分组问题。它按括号进行分组,每当正则表达式中的出现一组括号,正则引擎就进行记录一组值,把括号中的值给隐性记住。这样就可以以便以后访问。
$1就是指的分组号为1的那一组内容,或许你要问,表达式中不是出现两组括号吗?那你要去前面看看?:的意思,?:它是告诉正则引擎不用记住这组括号的分组号和分组值。也就是告诉正则引擎那组括号不起作用。
其实从这一分组中,我们也能看到一些正则表达式的优化内容,那就是不要滥用括号,不要让引擎记住太多的内容。还有一点就是可以用?:让正则引擎不记住括号的内容。这两点也是常用的优化正则表达式的手段。
分享到:
相关推荐
源码学习有助于深入理解正则表达式在PB环境下的工作原理,也可能为自定义或扩展组件功能提供可能。 总的来说,pbregexp组件为PowerBuilder开发者提供了一种强大而灵活的工具,帮助他们更高效地处理文本数据。通过...
正则表达式是一种强大的文本...通过深入研究这个C#版的正则表达式测试工具源码,开发者不仅可以巩固正则表达式的基础知识,还可以提升在C#环境中应用正则表达式的能力,同时学习到UI设计和事件处理等方面的实践技巧。
首先,让我们深入理解正则表达式。正则表达式是由特殊字符(元字符)和普通字符组成的字符串,它们定义了一种模式,用于匹配一系列相似的字符串。在Qt中,我们可以使用`QRegularExpression`类来处理正则表达式。这个...
### 正则表达式基础知识与...对于想要深入学习并掌握正则表达式技术的读者来说,本书无疑是一个非常有价值的参考资料。通过阅读本书,读者不仅可以学到理论知识,还能通过实践案例加深理解,提高解决实际问题的能力。
本文将深入探讨易语言中的正则表达式文本替换功能及其应用。 正则表达式(Regular Expression)是一种模式匹配工具,用于对字符串进行搜索、查找、替换等操作。在易语言中,正则表达式主要通过内置的函数和模块来...
在编程世界中,三目运算符和正则表达式是两个非常重要的概念,它们各自扮演着独特的角色,同时也常被结合起来使用,以提高代码的简洁性和效率。让我们深入探讨这两个主题。 首先,三目运算符,也称为条件运算符,是...
本书基于各种实用场景,从基础的文本匹配开始,逐步深入到回溯引用、条件性求值以及前后查找等高级特性,使得读者能够系统、全面地掌握正则表达式的使用方法,并将其应用于解决实际问题中。 书中介绍的正则表达式...
在IT行业中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换等操作。...通过查看源代码,学习者可以深入了解如何在C++中利用第三方库实现正则表达式功能,并且掌握相关API的用法。
本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...
十年三版,再显王者风范,近30年开发经验的智慧结晶,深入理解正则表达式,彻底修炼基本功,全球第一本全面深入讲解正则表达式的经典巨著,《程序员》杂志技术主编孟岩鼎力推荐。 专家点评:《精通正则表达式》是...
在本主题中,我们将深入探讨如何使用正则表达式来生成满足特定条件的随机数据。这在数据测试、生成假数据或者模拟真实场景时非常有用。 一、正则表达式基础 1. **基本元素**:正则表达式由一系列字符和特殊符号...
这个压缩包包含了丰富的正则表达式学习资源,适合有一定基础的初学者深入学习。 1. **基础概念** - **模式匹配**:正则表达式定义了一种模式,可以用来匹配符合该模式的字符串。 - **元字符**:如`.`代表任意单个...
本节将深入探讨`re.compile()`函数及其在创建正则表达式对象中的应用。`re.compile()`是Python标准库`re`模块中的一员,它允许我们将正则表达式模式编译为可重用的对象,从而提高执行效率。 ### 正则表达式基础 ...
这本书深入浅出地讲解了正则表达式的理论与实践,无论是中文扫描版还是英文电子版,都为学习者提供了详尽的资源。 中文版《精通正则表达式》(第3版)可能以扫描版的形式存在,这意味着它可能包含扫描的图片,阅读...
本文将深入探讨易语言中的正则表达式匹配中文的原理、方法以及应用。 正则表达式(Regular Expression)是一种模式匹配的语言,用于描述一种字符串的集合。在易语言中,我们可以通过内置的字符串函数来实现正则...
通过易语言提供的正则表达式类,我们可以高效地处理中文文本,进行复杂的字符串分析和处理,而无需深入了解底层的字符串编码和解析机制。这使得易语言成为处理中文文本的理想选择,尤其适合那些对编程有一定兴趣但不...
正则表达式的学习需要对元字符、量词、预查、后向引用等概念有深入理解,同时掌握Java中`Pattern`和`Matcher`的使用方法,结合实际案例进行实践,才能灵活运用到实际项目中。在处理字符串相关问题时,熟练掌握正则...
本文将对正则表达式的基础知识进行详细的介绍,从什么是正则表达式开始,逐步深入浅出地讲解正则表达式的基本概念、正则表达式引擎、文字符号、特殊字符、不可显示字符、正则表达式引擎的内部工作机制等。...