`
viMory
  • 浏览: 56378 次
  • 性别: Icon_minigender_1
  • 来自: 土卫六
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何利用正则表达式来处理字符串

阅读更多

正则表达式(regular expression记为RE)常用于文本检索和计算生物学中,它可以表示比单字符串、字符串集合、扩展字符串更复杂的搜索模式。

正则表达式有三种最基本的运算:并、连接、闭包。分别记为“|”、“.”、“*”。如果RE1 RE2 都是正则表达式,则(RE1 . RE2)、(RE1 | RE2)、(RE1 *)也都是正则表达式。

如图1是利用正则表达式知识来处理字符串的经典方法。

3d62d2f8-0ad6-3f3a-91e2-78b6aa71fb46

 

    首先,正则表达式被解析成一棵表达式树,然后将表达式树转换成非确定有限自动机。然后就是5.1节所讲的利用自动机处理字符串。在这里,其实从NFA直接处理也是

可行的,但由于要保存活动状态列表,并且每读入一个新文本字符都要更新这个列表,因此这个算法处理速度通常较慢。

2是一个正则表达式(AB|BA)(AA)*的解析树表示。

9a7b8bb5-0a08-3a99-9dda-c7ea08693542

Thompson构造法是一种从正则表达式构造自动机的方法.它使用自动机直接表示一个正则表达式对应的树表示,并且使用 -转移来简化这个表示过程。

Thompson构造法的核心思想是形成正则表达式RE对应的树表示Tre,然后自底向上地对树Tre的每个节点v,构造一个自动机Th(v)来识别以v为根的子树所表达的语言。根据不同类型的中间节点和叶节点,有不同的自动机构造方法,具体情况如下:

①:空字的构造方法。自动机由 -转移连接两个节点而组成。

 

681a33c7-7ab3-355b-a8ff-dd96f15f5ad2

②:单字符a的构造方法,它与空词的构造方法类化,只不过转移是使用字符来标识,而不是空字符串。

  77576c3a-08d1-3a8b-b7c9-bab00712815a

        ③:连接节点的构造法。瘵两个子节点vlvr 对应的Thompson自动机合并,即第一个自动机和终止状态成为第二个自动机的初始状态。

    89e37e0e-cbef-3c90-a0e1-3b4028a4a863

    ④:并节点的构造法:就像电路图中的并联一样,必须通过两个子节点对应的自动机vlvr中的一个。这种构造需要 -转移,在构造中,要添加二个状态,一个初始状态I,从它有二个 -转移分别到Th(vl)Th(vr)的初始状态;另一个是终止状态F,从自动机Th(vl)Th(vr)的终止状态分别由 -转移到达终止状态F

     2d0986c7-855d-3979-95e8-57cd25388a60

     ⑤:星节点的构造法:因为节点的唯一子节点v*可以被重复任意多次,所以需要创建一个从自动机Th(v*)的终止状态指向其初始状态的 -转移。但是,星符号也意味着自动机Th(v*)也可能被忽略。因此,需要创建初始节点I和终结节点F,并用一个 -转移将他们连接起来。另外,再创建两条 -转移分别用来从节点I指向Th(v*)的初始状态以及从Th(v*)的终止状态指向F。如图。

      F847306e-f100-34e2-9633-3edd4b285d21

 

正则表达式和自动机密切相关,都是处理字符串问题的重要工具。

1
0
分享到:
评论

相关推荐

    正则表达式正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此

    正则表达式 正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

    Python程序设计:正则表达式检索与替换.pptx

    正则表达式处理字符串主要有四大功能,匹配、获取、替换和分割: 匹配 的功能是查看一个字符串是否符合正则表达式的语法,一般返回true或者false; 获取 的功能是正则表达式来提取字符串中符合要求的文本; 替换 的...

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    string :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大...

    常用java正则表达式

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    Node.js-execall-发现多个正则表达式匹配的字符串

    execall - 发现多个正则表达式匹配的字符串

    Go-goregen-从正则表达式生成随机字符串Go库

    goregen - 从正则表达式生成随机字符串Go库

    18.C#字符串和正则表达式参考手册 影印版

    4.3 处理字符串 95 4.3.1 CultureInfo类 96 4.3.2 大写和小写 99 4.3.3 不需要区分文化的操作 101 4.3.4 排序 101 4.4 处理字符 106 4.4.1 关于字符的必要信息 107 4.4.2 代理对 107 4.4.3 组合字符 112 4.5 格式化...

    SqlServer类似正则表达式的字符处理问题

    1. 同一个字符/字符串,出现了多少次 2. 同一个字符,第N次出现的位置 3. 多个相同字符连续,合并为一个字符 4. 是否为有效IP/身份证号/手机号等  一. 同一个字符/字符串,出现了多少次 同一个字符,将其替换为...

    正则表达式及R字符串处理1

    2.正则表达式 2.正则表达式 1.对元字符进行转义(后续会有介绍) 2.一些以 \ 开头的特殊序列表达了一些字符串组

    正则表达式必知必会

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串...

    C#中利用正则表达式实现

    对于处理字符串(例如 HTML 处理、日志文件分析和 HTTP 标头分析)的许多应用程序而言,正则表达式是不可缺少的工具。  .NET 框架正则表达式并入了其他正则表达式实现的最常见功能,被设计为与 Perl 5 正则表达式...

    Python正则表达式标准库使用教程.pdf

    正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别...

    正则表达式简明教程及正则表达式语言元素

    作为一个处理字符串的极其强大的方法工具,正则表达式本身几乎可以被视为是一种完整的语言。要掌握正则表达式的所有内容,包括样式匹配、向后引用和命名组,需要整整一本书。幸运的是,只要了解正则表达式的基本原理...

    java正则表达式经典实例

    正则表达式到底是什么东西?...在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

    正则表达式大全 正则表达式 模式匹配 Javascript

    关键字:正则表达式 模式匹配 Javascript ...正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    StringBuilderApplication/DealWithStringBuilder.aspx 动态字符串处理 第9章(/09/) RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 ...

    神奇的匹配-正则表达式之旅

    本书从正则表达式的基本概念、基本语法入手 着重于数字验证、字符串验证、数字和字符串混合验证及html处理等各个方面的应用。并基于目前流行的程序语言和应用环境-如c、asp.net、jsp、或php 全面介绍了创建正则...

    神奇的匹配 正则表达式求精之旅

    《神奇的匹配:正则表达式求精之旅》从正则表达式的基本概念、基本语法入手,着重于数字验证、字符串验证、数字和字符串混合验证及HTML处理等各个方面的应用。并基于目前流行的程序语言和应用环境(如C#、ASP.NET、...

    正则表达式语法(常用的正则表达式)

    正则表达式大全 摘要:收集一些常用的正则表达式。...正则表达式用于字符串处理,窗体验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。共享一些常用的表达式在这里,作备忘之用。

    什么是正则表达式 (由一些普通字符和一些元字符组成)

    一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式...

Global site tag (gtag.js) - Google Analytics