代码之美——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;
}
今天边晒太阳,边看《代码之美》,体会大师思想,真是种不错的享受!
摘自书上原文,有网友已经做好,故转载之~
分享到:
相关推荐
4. restack.h:这个文件可能涉及到回溯栈的实现,回溯是正则表达式匹配过程中常用的一种技术,当匹配失败时,会回退到之前的状态以尝试其他可能的匹配路径。 5. greta2.htm:这是一个HTML文档,很可能是greta-2.6.4...
【代码之美\正则表达式匹配器】章节主要探讨了正则表达式的基本概念和历史,以及其在编程实践中的应用。正则表达式是一种强大的文本模式匹配工具,由美国数学家Stephen Kleene在20世纪50年代提出,最初用于描述有限...
在Lucene中,可以通过`regexQuery`来利用正则表达式进行复杂条件的匹配,从而实现更精确的搜索需求。 #### regexQuery详解 `regexQuery`是Lucene提供的一个用于执行正则表达式查询的方法。它接受一个`Term`对象作为...
在Go语言中,正则表达式(Regular Expression,简称RE)是一种强大的文本处理工具,它能用来匹配、查找、替换符合特定模式的字符串。在Go的`regexp`包中,提供了对正则表达式的支持。这个名为“Go-Go的常用正则...
- 文件搜索:在代码编辑器中,使用正则表达式快速查找和替换特定模式的文本。 - 数据清洗:在数据预处理阶段,正则表达式可以帮助剔除无关字符,整理数据格式。 - 网页抓取:在网络爬虫中,正则表达式用于提取...
- 日志分析:通过正则表达式提取设备的日志信息,如错误代码、时间戳等。 - 配置文件解析:在设备配置文件中查找或替换特定设置,以批量更新设备状态。 - 数据验证:确保输入的数据符合设备装置的要求,如检查MAC...
一个好的正则表达式匹配调试工具可以帮助开发者快速定位问题,理解匹配规则,并优化正则表达式。这类工具通常提供以下功能: 1. **实时匹配测试**:用户输入正则表达式和目标字符串,工具会即时展示匹配结果,帮助...
下面是一个简单的JavaScript示例代码,展示如何使用正则表达式匹配`<div>`和`<style>`标签: ```javascript // 示例字符串,包含div和style标签 var htmlString = '<div>这是一个div标签的内容。这是style标签中的...
本项目提供了一个C#编写的正则表达式测试工具,包含完整的源代码,可以帮助开发者调试和测试他们的正则表达式,支持查找和替换功能,并能直观地显示匹配结果。 1. **C#中的正则表达式基础** - `System.Text....
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它们在计算机科学中扮演着重要角色,特别是在编程语言、文本编辑器和搜索引擎中。正则表达式通常简称为“regex”或“regexp”,可以...
在"C++ 正则表达式匹配工具源码"中,我们可以期待看到一系列类和函数,它们是基于`<regex>`库实现的,用于解析、编译和执行正则表达式。这些工具可能包括: 1. **正则表达式编译**:`std::regex`类用于创建一个正则...
"正则表达式匹配(自动转换)"指的是通过特定的软件或编程库,将正则表达式应用到文本中,自动进行匹配操作,无需用户手动处理。 在描述中提到的"无需再为正则表达式而烦恼",意味着这样的工具或功能提供了便捷的...
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。C#作为.NET框架的一部分,提供了全面支持正则表达式的类库,使得开发人员能够方便地利用正则表达式进行复杂的文本处理任务。在这个...
《深入理解PCRE:C语言实现的Perl正则表达式库》 PCRE,全称为Perl Compatible Regular Expressions,是一个用C语言实现的正则表达式库,它提供了与Perl语言正则表达式语法和行为相兼容的功能。PCRE库在编程领域中...
- `reset()`:重置匹配器的状态,准备进行新的匹配。 - `find()`:查找下一个匹配的子串。 - `lookingAt()`:从当前匹配位置开始查找匹配的子串。 8. **分组与编号** - 分组通过圆括号`()`实现,分组编号由左...
3. `Matches(string input, string pattern)`: 返回一个`MatchCollection`,其中包含了输入字符串中所有与正则表达式匹配的部分。 4. `Replace(string input, string replacement, string pattern)`: 使用`...
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或提取特定模式的字符串。RegexTest.exe 是一个专门用于测试和解析正则表达式的应用程序,它可以帮助用户理解和调试...
总的来说,"正则表达式验证器"是一个强大的辅助工具,它简化了正则表达式的测试过程,让程序员可以更加专注于代码的其他部分。对于初学者来说,它是一个很好的学习工具,可以帮助理解正则表达式的运作方式;对于经验...
Boost库的正则表达式组件,即`boost::regex`,是C++实现正则表达式的常用选择之一,它提供了一套完整的API接口,使得在C++中编写正则表达式相关的代码变得相对简单。 在Visual Studio 2008环境下,开发者可以将...
- `Matcher.find()`: 查找输入字符串中与正则表达式匹配的部分,返回true表示找到至少一次匹配。 - `Matcher.group()`: 返回上一次匹配成功的子字符串。 - `Matcher.replaceAll(String replacement)`: 使用给定的...