`

代码之美--简单正则表达式匹配器实现

阅读更多

代码之美——30行代码实现正则表达式匹配器

Rob Pike在《The Practice of Programming》中使用约30行代码,实现了一个正则表达式匹配器,用来处理以下的模型。
字符 含义
c 匹配认字的字母c
.(句点) 匹配任意的单个字符
^ 匹配输入字符串的开头
$ 匹配输入字符串的结尾
* 匹配前一个字符的零个或者多个出现
 这段代码紧凑、优雅,高效并且实用,同时展示了C指针的强大功能。
/*match :在text中查找regexp*/
int match(char *regexp,char *text)
{
 if(regexp[0] == '^')
  return matchhere(regexp+1,text);
 do{ /*即使字符串为空也必须检查*/
  if (matchhere(regexp,text))
   return 1;
 }while (*text++!= '\0');
 return 0;
}
/*matchhere在text的开头查找regexp*/
int matchhere(char *regexp,char *text)
{
 if (regexp[0] == '\0')
  return 1;
 if (regexp[1] == '*')
  return matchstar(regexp[0],regexp+2,text);
 if (regexp[0] == '$' && regexp[1]=='\0')
  return *text == '\0';
 if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text))
  return matchhere(regexp+1,text+1);
 return 0;
}
/*matchstar :在text的开头查找C*regexp*/
int matchstar (int c,char *regexp,char *text)
{
 do { /*通配符*匹配零个或多个实例*/
  if (matchhere(regexp,text))
   return 1;
 }while (*text!='\0' && (*text++ ==c || c== '.'));
 return 0;
}
今天边晒太阳,边看《代码之美》,体会大师思想,真是种不错的享受!
摘自书上原文,有网友已经做好,故转载之~ 
分享到:
评论

相关推荐

    常用java正则表达式

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

    代码之美\正则表达式匹配器

    代码之美\第1章 正则表达式匹配器.doc

    正则表达式自动生成器 v2.0.0 专业版.zip

    正则表达式自动生成器是一个智能、易用的正则表达式生成、测试以及字符串提取工具。正则表达式库让你可以直接借用正则表达式,而无需自己费脑筋。“正则表达式自动生成器”可以自动生成正则表达式,测试正则表达式,...

    正则表达式验证器(附源代码)

    用于检验正则表达式 代码中包括正则表达式的匹配 既可以在工作中方便的检验正则表达式的正确性 也可以用来学习如何在C#中使用正则表达式

    运用正则表达式匹配所有表名

    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多...

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

    其他的正则表达式匹配.php 其他的正则表达式匹配 取得正则表达式的全部匹配.php 取得正则表达式的全部匹配 返回与模式匹配的数组单元.php 返回与模式...

    java正则表达式.docx

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

    正则表达式

    例如:下面的正则表达式匹配的就是位于单引号或双引号之内的所有字 符.但是,它要求开始和结束的引号匹配(例如两个都是双引号或者都是单引号): /[' "] [^ ' "]*[' "]/ 如果要求开始和结束的引号匹配,我们可以...

    Java正则表达式详解

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

    正则表达式经典实例中文版 (美)高瓦特斯

    他的产品中包括RegexBuddy,世界上唯一可以模拟l5种正则表达式流派特性的正则表达式编辑器,以及PowerGREP,Microsoft Windows平台上功能最强大的9rep工具。 媒体评论 “这是一本严谨的著作,内容非常丰富。仅仅...

    正则表达式经典实例

    他的产品中包括RegexBuddy,世界上唯一可以模拟l5种正则表达式流派特性的正则表达式编辑器,以及PowerGREP,Microsoft Windows平台上功能最强大的9rep工具。 目录: 第1章 正则表达式简介 1.1 正则表达式的定义 ...

    正则表达式经典实例.(美)高瓦特斯

    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多...

    C#制作简单正则表达式测试器

    C#制作简单正则表达式测试器部分代码: namespace RegexTest { public partial class Rt : Form { public Rt() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } private void btnPi_...

    正则表达式经典实例.pdf

    他的产品中包括RegexBuddy,世界上唯一可以模拟l5种正则表达式流派特性的正则表达式编辑器,以及PowerGREP,Microsoft Windows平台上功能最强大的9rep工具。 目录: 第1章 正则表达式简介 1.1 正则表达式的...

    常用正则表达式.txt

    正则表达式,又称正规表示法、常规表示法。(英语:Regular Expression...正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

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

    C#字符串和正则表达式参考手册 目 录 第1章 系统处理文本的方式 1 1.1 .NET Framework 1 1.1.1 公共语言运行时 2 1.1.2 .NET Framework类库 3 1.2 文本是一种数据类型 4 1.2.1 C#的数据类型 5 1.2.2 字符和字符集 6 ...

    t-regex:使用树正则表达式的匹配器和语法

    t-regex :使用树正则表达式的匹配器和语法t-regex定义了一系列组合器,以在任何Haskell数据类型上表达树正则表达式。 此外,通过使用一些组合器(以及一些模板Haskell),它定义了一种很好的语法,用于使用该树正则...

    实例代码详解正则表达式匹配换行

    在javascript中,使用正则表达式匹配换行可能会遇到各种问题,下面就通过实例介绍一下如何实现此功能。 ”main”> ”left”> ”right”> 软件开发网  如果DIV内没有内容则不换行 把上面的改为: ”main”> ”...

    Python 正则表达式入门(初级篇)

    在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念...

Global site tag (gtag.js) - Google Analytics