`
wkf41068
  • 浏览: 457672 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

正则中的子表达式应用

 
阅读更多
正则中的子表达式
1. 子表达式是一个更大的表达式的一部分;把一个表达式划分为一系列肚子表达式的目的是

为了把那些子表达式当做一个独立元素来使用(类似于独立字符)

2. 子表达式必须用(和)括起来。(和)是元字符。

3. 复杂而高效正则会多次用子表达式休息。


正则表达式复杂而高效的模式会用到子表达式(对表达式进行分组和归类)。

前面我们提到过如何匹配一个字符的连续多次重复。如:\d+ 匹配一个或多个数字字符;  

https?:// 将匹配http:// 和https://

<b>实例一. </b>
    有这么一个场景: 找出文本中连续两次货更多次的重复出现找出来。 文本如下:  I am the author of books Windows &nbsp;&nbsp; and other subjects.

匹配表达式采用重复匹配{2,}, 如是&nbsp;{2,} 

结果匹配不出来。因为用来表明重复次数的元字符?或*或{2,} 等只作用于紧挨着她得前一个字符或元字符。

如果要完成上面提到的任务需要用到子表达式,其模式写法为(&nbsp;){2,}

(&nbsp;)是一个子表达式; 在此它被视为一个独立的元素/"字符",紧跟后面的{2,}将作用于这个子表达式。

B.前面的例子中提到,正则匹配查找文本中的IP地址:

	用到的正则是\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 

    分析发现:  B.1  \d{1,3}在这个模式里重复了4次,它们分别匹配IP地址里的一组数字。(IP地址里的4组数字由.分隔,该字符又模式里的转义序列\.负责匹配)

	       B.2  仔细一看,可以发现\d{1,3}\.联系出现了3次,它同样可以被表达为一个重复。

    鉴于上面的分析,使用子表达式会更简洁省事。 (\d{1,3}\.){3}\d{1,3}



实例二如下:

Major: Physics
Birth: 1985-05-30
Place: China

把上面记录的文本中年份数字完整地找出来。 

一般可能写法是: 19|20\d{2}  | 字符是正则表达式语言里的或操作符, 19|20讲匹配数字序列19或20

上面的正则表达式初一看感觉是没有任何问题的,但是匹配的结果确不是我们想要的。因为它只匹配到了19.

原因分析: | 操作符是把位于它左边和右边的两个部分都作为一个整体来看待的,它会把模式19|20\d{2} 解释为19或20\d{2}即将\d{2}解释为以20开头的那个表达式的一部分。

	   换句话说19|20\d{2}将匹配数字19或以20开头的任意4为数字。


解决办法是: 把19|20 归为一个子表达式如: (19|20)\d{2}  把所有的选项都归纳到了一个子表达式里,这将向|表明用户打算匹配的是表达式里的选项之一。





子表达式的嵌套

子表达式是容许多重嵌套,但是实际工作中还是应该适可而止。

   多重嵌套的子表达式可以构造出功能非常强大的正则表达式来,但这难免会让模式变得难以阅读和理解,而这真是很多人觉得正则表达式难以学习和掌握的原因之一。

其实是表面现象掩盖了一个事实:绝大多数嵌套子表达式都没有他们看上去那么复杂。


看一个前面提到的匹配IP的模式:(\d{1,3}\.){3}\d{1,3} ,初看没有问题能匹配到IP但是他忽略了一点此模式还能匹配出非法的IP如400.23.35.253等等。

高效而正确的写法可以是:(\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5])

合法的IP应该符合的规则是:

任何一个一位或者两位的数字;任何一个以1开头的3位数字;任何以2开头,第二位数字在0-4之间的3位数;任何以25开头,第三位在0-5之间的3位数字。



<b>重要提醒</b>
在这里一个重要提醒:

	把必须匹配的情况考虑周全并写出一个匹配结果符合预期的正则表达式很容易,但

是把不需要匹配的情况也考虑周全并确保他们都将被排除在匹配结果意外往往要难很多。

  正则表达式是一个十分考察个人逻辑思维能力。

在构造定义一个正则表达式的时候,一定要把你想匹配什么和你不想匹配什么详细地定义清楚。


  子表达式的作用是把同一个表达式的各个相关的分组做好在一起。 在表达式必须用(和)来定义。

子表达式常见用途:对重复次数元字符的作用对象做出的设定和控制、对|操作符的OR添加



分享到:
评论

相关推荐

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本...通过深入研究这个C#版的正则表达式测试工具源码,开发者不仅可以巩固正则表达式的基础知识,还可以提升在C#环境中应用正则表达式的能力,同时学习到UI设计和事件处理等方面的实践技巧。

    正则表达式 正则表达式

    在编程领域,正则表达式(Regular Expression,简称regex)被广泛应用于数据验证、文本搜索和处理等方面。它由一系列特殊字符和操作符组成,能够描述一系列的字符组合规则。 在Java中,正则表达式是通过java.util....

    易语言取正则子表达式

    标题"易语言取正则子表达式"所涉及的知识点主要是易语言中对正则表达式的操作。在易语言中,正则表达式主要用于文本的搜索、查找、替换等功能,这对于数据处理和信息提取尤其有用。下面我们将深入探讨这些功能: 1....

    正则表达式速查 正则表达式举例 正则表达式学习

    #### 三、正则表达式应用实例 为了更好地理解这些规则,下面给出一些实际应用场景的例子: 1. **邮箱验证**:使用正则表达式验证用户输入的邮箱地址是否符合标准格式。 - 示例: - `'^[a-zA-Z0-9._%+-]+@[a-zA-Z0...

    【cad开发】在lisp中应用正则表达式

    另外,正则表达式模式可以组合使用多种符号来描述字符串的结构,例如,*号表示匹配前面的子表达式零次或多次,+号表示匹配前面的子表达式一次或多次,?号表示匹配前面的子表达式零次或一次等。 本文还提供了两个...

    正则表达式正则表达式.zip

    在实际应用中,正则表达式常用于数据验证(如邮箱、电话号码格式)、文本搜索与替换、数据提取(如网页爬虫中的信息抽取)等场景。熟练掌握正则表达式能极大地提高开发效率和代码质量,是每个IT从业者必备的技能之一...

    常用正则表达式常用表达式.doc

    在Visual Studio等开发环境中,正则表达式被广泛应用于搜索、替换功能,以增强其功能和精确性。 1. **基础语法**: - `.`:匹配任何非换行符的字符。 - `*`:匹配前面的字符零次或多次。 - `+`:匹配前面的字符...

    易语言取正则子表达式源码

    本资源提供了易语言取正则子表达式的源码,对于理解和运用正则表达式在易语言中的实现具有重要意义。 正则表达式(Regular Expression)是一种模式匹配工具,它可以用来检查一个字符串是否符合某种预定义的规则。在...

    易语言正则表达式类匹配中文

    在实际应用中,开发者可能会结合这些方法,实现如搜索、替换、分词、提取关键词等功能。例如,对于一个新闻网站,可以利用正则表达式类匹配中文源码来提取文章标题或关键词,或者在用户输入的搜索查询中进行模糊匹配...

    正则表达式(Deelx版)|正则表达式(Deelx版)支持库

    Deelx版是专门为提高正则表达式性能和功能而设计的一个支持库,适用于各种编程语言和应用场景。 1. **正则表达式基本概念** - **模式匹配**:正则表达式的核心在于模式,它是由特殊字符和普通字符组成的字符串,...

    易语言正则表达式文本替换

    例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...

    正则表达式(日期校验)

    ### 正则表达式在日期校验中的应用 #### 一、引言 在软件开发过程中,日期格式的校验是非常常见的需求之一。利用正则表达式进行日期格式的校验,不仅可以提高代码的可读性和简洁性,还能有效地确保输入数据的准确...

    正则表达式的应用

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一套预定义的规则(模式)来识别字符串中的特定序列...在实际应用中,需要根据具体需求来构建和调整正则表达式,以实现最佳的匹配效果。

    Oracle数据库正则表达式

    Oracle 数据库正则表达式应用详解 在 Oracle 数据库中,正则表达式是一种强大的模式匹配工具,可以帮助用户快速搜索、替换和验证数据。从 Oracle 10g 开始,Oracle 内建了符合 IEEE POSIX (Portable Operating ...

    Oracle中的正则表达式

    * REGEXP_SUBSTR:用于返回输入字符串中满足正则表达式的子字符串。 在 Oracle 中使用正则表达式可以带来许多好处,如: * 简化字符串处理:正则表达式可以简化字符串处理操作,提高程序的效率和可读性。 * 提高...

    正则表达式II 正则表达式

    在本章节中,我们将深入探讨正则表达式的一些高级用法及其在不同编程环境中的应用。 #### 二、正则表达式的基本语法与符号 正则表达式由一系列字符和特殊符号组成,这些符号赋予了正则表达式强大的匹配能力。下面...

    Java正则表达式简单应用

    这篇博客将带你了解Java正则表达式的简单应用,并结合两个示例文件`parse_redbend_log`和`eyesaver`进行讲解。 在Java中,正则表达式通常通过`java.util.regex`包中的类来使用,如`Pattern`和`Matcher`。`Pattern`...

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

    《精通正则表达式》与《正则表达式经典实例》两本书都是深入理解和应用正则表达式的宝贵资源。 1. **基础概念**:正则表达式由字符和特殊符号组成,用于定义一种模式。基础字符包括字母、数字、空格等,而特殊符号...

    正则表达式学习资料以及练习项目代码很多

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Python编程语言中,正则表达式提供了强大的文本处理能力,使得开发者能够高效地处理...

Global site tag (gtag.js) - Google Analytics