由于我已经在本学期的三门课的实践中(java聊天室数据库部分、软件工程研究JS插件时和现在的Qt)遇到了正则表达式,所以一听说Windows编程要写技术博客,我立刻想到的是正则表达式和之前提到过的责任链(另外本想如果时间充裕再写两篇的话估计就是宏以及Qt各种方面应用的深入研究,我相信我以后也会再回过头研究一下Qt的,毕竟Qt在很多领域都有应用的,就像我们的实验大作业一样),于是乎我找了一些资料加上自己的理解,力求将所写的每一个点都讲清楚。
我对这个一直的理解就仅限于它是用来进行字符串匹配的,然后按它的规则写一个这样的表达式就会将你想要的筛选出来,然而怎么筛选的以及一些复杂一点的表达式我就是一脸懵逼了。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
一个简单的模式示例为:“?” 字符匹配文件名中的单个字符,而“ *” 则匹配一个或多个字符
下面为摘自百度百科中关于正则表达式中元字符描述的表:
元字符
|
描述
|
\
|
将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。
|
^
|
匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
|
$
|
匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
|
*
|
匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。
|
+
|
匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
|
?
|
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。
|
{
n}
|
n是一个非负整数。匹配确定的
n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
|
{
n,}
|
n是一个非负整数。至少匹配
n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
|
{
n,
m}
|
m和
n均为非负整数,其中
n<=
m。最少
|