正则表达式(regular expression)是一种文本模式,包括普通字符(例如,a和z之间的字母)和特殊字符(称为“元字符”)。正则表达式使用单个字符串描述、匹配某个语法规则。虽然正则表达式是繁琐,但强大的,使用正则表达式可以很高效提高字符数据的处理与查找工作。
1. 正则表达式
1.1. 发展历史
正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。
随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
1.2. 优势
典型的搜索和替换工作要求我们提供与预期的搜索结果匹配的确切的文本,虽然这种技术对于静态文本执行简单的搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本就变得无比困难。通过使用正则表达式,可以实现:
- 测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话模式或信用卡模式,实现数据验证
- 文本替换。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他的文本替换它
- 基于模式匹配从字符串中提取子字符串,可以查找文档内或输入域内特定的文本。
例如,您可能需要搜索整个网站,删除过时的资料,以及替换某些HTML。亦或者是你使用web浏览器搜索某个关键内容,查找出所有包含相关内容的web网页。在这种情况下,可以使用正则表达式来确定在某个文件中是否出现该资料或该HTML格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的资料,最后使用正则表达式来搜索和替换标记。
2. 应用领域
目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
2.1 不同语言实现
-
C# 正则表达式。在我们的 C# 教程中,这一章节专门介绍了有关 C# 正则表达式的知识。
-
Java 正则表达式。在我们的 Java 教程中,这一章节专门介绍了有关 Java 正则表达式的知识。
-
JavaScript 正则表达式。在我们的 JavaScript 教程中,这一章节专门介绍了有关 JavaScript 正则表达式的知识,同时我们还提供了完整的。
-
Python 正则表达式。在我们的 Python 基础教程中,这一章节专门介绍了有关 Python 正则表达式的知识。
-
Ruby 正则表达式。在我们的 Ruby 教程中, 这一章节专门介绍了有关 Ruby 正则表达式的知识。
-
C++正则表达式。在我们的C++教程中,C++正则表达式这一章节专门介绍有关C++正则表达式的知识
-
shell正则表达式。在我们的shell教程中,shell正则表达式这一章专门介绍有关shell正则表达式的知识
2.2 不同语言正则特殊字符实现
命令或环境 | . | [ ] | ^ | $ | \( \) | \{ \} | ? | + | | | ( ) |
vi | √ | √ | √ | √ | √ | |||||
Visual C++ | √ | √ | √ | √ | √ | |||||
awk | √ | √ | √ | √ | awk是支持该语法的,只是要在命令 行加入 --posix or --re-interval参数即可,可见 man awk中的interval expression | √ | √ | √ | √ | |
sed | √ | √ | √ | √ | √ | √ | ||||
delphi | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
python | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
java | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
javascript | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
php | √ | √ | √ | √ | √ | |||||
perl | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
C# | √ | √ | √ | √ | √ | √ | √ | √ |