正则表达式--教程二(语法):https://blog.youkuaiyun.com/alzzw/article/details/99470144
正则表达式--教程三(匹配规则及示例):https://blog.youkuaiyun.com/alzzw/article/details/99474981
正则表达式--元字符:https://blog.youkuaiyun.com/alzzw/article/details/99474676
正则表达式
教程:
- 正则表达式( Regular Expression)是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符")。
- 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
- 正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。
- 许多程序设计语言都支持利用正则表达式进行字符串操作。
实例:
regex_match()
算法可以用于比较一个给定源字符串和一个正则表达式模式,如果模式匹配整个源字符串,则返回true
,否则返回false
。
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "abc123def";
regex ptt("[0-9]+");
cout << regex_match(str, ptt) << endl;
return 0;
}
//匹配不成功
简介:
除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。
例如,您很可能使用?和*通配符来查找硬盘上的文件。?通配符匹配文件名中的0个或1个字符,而*通配符匹配零个或多个字符。像data(w)?.dat这样的模式将查找下列文件:
data.dat
datal. dat
data2. dat
datax. dat
dataN. dat
使用*字符代替?字符扩大了找到的文件的数量。data,*,dat匹配下列所有文件:
data. dat
datal. dat
data2. dat
data12. dat
datax. dat
dataxYz dat
尽管这种搜索方法很有用,但它还是有限的。通过理解*通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活正则表达式的使用,可以通过简单的办法来实现强大的功能。下面先给出一个简单的示例:
^为匹配输入字符串的开始位置。
[0-9]+匹配多个数字,[0-9]匹配单个数字,+匹配一个或者多个。
abc$匹配字母abc并以abc结尾,$为匹配输入字符串的结束位置。
我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符(),并设置用户名的长度我们就可以使用以下正则表达式来设定.
以上的正则表达式可以匹配 runco、 runco1、run-oob、 run oob,但不匹配r,因为它太短了,也不匹配 runco$.因为它包含特殊字符。
实例:匹配以数字开头,并以abc结尾的字符串:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "123abc";
regex ptt("[0-9]+abc");
cout << regex_match(str, ptt) << endl;
return 0;
}
//匹配成功
应用及发展:
典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难
通过使用正则表达式,可以
- 测试字符串内的模式:例如可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
- 替换文本: 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
- 基于模式匹配从字符串中提取子字符串: 可以查找文档内或输入域内特定的文本
例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些HTML格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该HTML格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。
发展历史:正则表达式的祖先"可以一直上溯至对人类神经系统如何工作的早期研究。 Warren Mc Culloch和Wate r Pitts这两位神经生理学家研究出一种数学方式来描述这些神经网络
1956年,一位叫 Stephen Kleene的数学家在 McCulloch和Pits早期工作的基础上,发表了一篇标题为“神经网事件的表示法“的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数的表达式,因此采用“正则表达式这个术语。
随后,发现可以将这一工作应用于使用 Ken Thompson的计算搜索算法的一些早期研究, Ken Thomps on是Unx的主要发明人。正则表达式的第一个实用应用程序就是Unx中的qed编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。
应用领域: