正则表达式的形式定义
称R是一个正则表达式,如果R是
1) a,这里a是字母表E中的一个元素
2) 长度为0的串集
3) 空串集
4) (R1 | R2),这里R1和R2是正则表达式
5) (R1R2),这里R1和R2是正则表达式
6) R*,这里R是正则表达式
注:a其实是{a}, 代表一个集合
正则表达式描述的是什么
从其形式化定义中可以看出,正则表达式实际描述的是一个在给定字母表上的字符串集合。当然该集合包含长度为0的串集及空串集。
形成SET的三种方式
1、两个SET的并
2、一个SET中的任意串与另一个串中的任意串连接成新串,再把这些新串整合成一个新的SET
3、一个SET中任意number个串连接成新串,再把这些新串整合成一个新的SET
实际应用中的正则表达式
实际应用中,正则表达式多用简写,下表描述了简写的展开说明
简写 展开
匹配单个字符
. 字符表的所有字符的集合
[...] 列出的字符集合
[^...] 列出的字符集合的补集
\char 转义字符
提供计数功能
+ 让一个表达式出现1次或多次
? 让一个表达式出现0次或1次
{min,max} 让一个表达式出现至少min次最多max次
匹配位置
^ 匹配一行的开头
$ 匹配一行的结束
\< 匹配一个单词的开始
\> 匹配一个单词的结束
注:位置实际上是可以转化的标准的正则表达式的,如一个单词的开始可以用一个空格加一个字母来表示。
其它
\1 \2... 反向引用,匹配之前第1,第2组括号内表达式匹配的文本
注:这其实已经超出了正规正则表达式的描述能力,但由于其实用性,还是被加入了表达式
() 可用于改变优先级或者捕获
(?:) 用于分组而不捕获
实际应用中都是怎么使用正则表达式的
一般都是给定一个字符流,然后你指定一个正则表达式,你可以进行的操作有,查找,插入或替换,实际上插入可以归结为对位置的替换。
一些附加的参数
这些附加的参数不是正则表达式的一部分,但它能影响表达式的意义或对操作产生影响
i:忽略大小写
实际应用步骤
在使用正则表达式进行工作时,首先是正确地描述出你所要描述的串集,就是一定要保持正确性。
其次,简化它,用语言提供的简化串进行简化,简化的前提是能够提高表达式的可读性。再次,如果效率是很重要的,则使用优化技巧进行优化,否则不要做无谓的工作。
正则表达式中出现字符的分类
正则表达式中出现的字符功用有两类,一类是可以转化成标准正则表达式,另一类则是与操作相关的,如忽略优先量词中的?,它决定了匹配时是否贪婪,而它却不影响正则表达式匹配的字符集。
提取网页标题:(?<=
\s*)(\S|\S.*\S)?(?=\s*)
阅读(1193) | 评论(0) | 转发(0) |