正则表达式初步总结

表达式的构造细节

特殊字符
具体文本
解释顺序-                       
针对的对象(什么工具软件)

正则表达式字符构成

match 匹配
    metacharacter           元字符
    normal text character    解释正则表达式按照字符来理解
                接下来是and then
    character set           字符组
    alternative             多选分支 --自身可以是完整的正则表达式

位置:anchor 锚定

行开头      ^
行结尾     $
字符开头        \<       并不是所有语言支持,注意
字符结尾        \>  
            \b
( )         使用括号来划定多选结构的范围,以及限制多选分支;分组 ;捕获文本

数量

quantifiers 量词
    ?               0或1个
    *               0或多个
    +               1或多个
interval quantifier 区间量词
    {n}             =n
    {n,m}           n<=   <=m
    {n,}            >=n
    {,m}            <=m

字符

.                               任意字符
排序-预定义字符类
大小写                     是够忽略大小写 egrep -i 参数 忽略大小写

字符组

[ ]                             字符组
[^ ]                            排除型字符组 匹配一个未列出的字符
[a-z] [A-Z] [A-Za-z]
[0-9] 
[A-Za-z0-9]

字符组和字符

[ - ]                   字符组元字符,必须在字符组中,且位于字符中间
. ?                     在字符组中是普通字符  
内外有别

转义字符

      \             backslash 反斜线-- escape 转义符

其他概念

backreference   反向引用      特殊元字符序列  \1
正则表达式的解读方式

Linux上的命令

基础正则表达式
        Basic Regular Expression,具有更加严谨的字符串表示方式,其典型辅助程序命令为gre
扩展正则表达式
        Extend Regular Expression,具有更加广泛和简便的使用模式,其典型辅助程序命令为egrep。

Flavor 流派-了解技术渊源

1.支持的元字符和这些元字符的意义
2.与宿主语言的交互方式
3.正则表达式的引擎,以及如何应用到文本
            所使用的引擎的类型,决定了引擎能够支持的特性以及这些特性的用途

历史
    正则集合--正则表达式--正则表达式编译器
    正则表达式--词法分析
        编译原理--语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成
            程序设计语言的本质
    Henry Spencer 正则表达式包
POSIX
    locale -- 让程序变得国际化
        Basic Regular Expressions
        Extended Regular Expressions

正则表达式的处理方式:

集成式
            perl 的集成式
                =~ m/^Subject:(.*)/i
程序式
面向对象式
        由构造函数及其方法提供
    例如java包提供两个类-PatternMatcher
         import java.util.regex.*;
         Pattern r = Pattern.compile("",Pattern.CASE_INSENSTIVE);
         Matcher m = r.matcher(line);

函数式
        由普通函数提供

正则表达式原理

Finite Automation
    当前状态读入一个字符后,和后继状态的转换- (状态-字母表 输入字符-初态集--状态转移矩阵-终态集 )
            后继状态为自身
            后继状态只有一个
            后继状态有多个
        如果每次转换后继状态唯一,则 Deterministic            DFA
                                                 反之则 Nondeterministic       NFA
                                                    NFA 有若干初始状态,允许接受字 ,多值映射
DFA- 文本主导       text-directed           确定性有穷自动机
     DFA对于文本串里的每一个字符只需扫描一次,比较快,但特性较少
    最长的左子正则式优先匹配成功”

NFA- 表达式主导  regex-directed      非确定性有穷自动机
        速度慢,但是特性丰富
        支持lazy和backreference等特性
        最左子正则式优先匹配成功,因此偶尔会错过最佳匹配结果

引擎分类的具体语言

DFA
        awk egrep   MySQL
NFA--传统型
        Java、Python 、Perl 、PHP 、
        GNU Emacs 、vi、
        grep  、sed 、
NFA--POSIX型
    混合
        GNU awk、GNU grep/egrep

编辑文本的正则表达式

01.UltraEdit 
        UltraEdit的正则表达式
         删除多余空行。
            删除空行:   替换  %[ ^t]++^p  为 空串
            删除行尾空格: 替换  [ ^t]+$     为 空串 
            删除行首空格: 替换  %[ ^t]+     为 空串
    UltraEdit 
        perl的正则表达式
        1.非某个字符开头的全部替换为空--perl
            ^(?!create table).*$
            ^(?!create table).*$
            ^是字符串开头,(?!   )  是否定环视,意思是后面不是……
        2.例如
        ^(?!drop|--).*$
        3.多个连续的空格替换成一个空格
            [ ]+
02.Editplus
    ^Nov.*$
    空白行
        ^[ \t]*\n   ^[ \t]*\n是一行空白行的正则表达式,多次点击全部替换

附录:

1.框架性知识和具体知识
    框架性知识:系统的学习和阅读
    具体知识:    实践积累
2.表达式的基本模型和解决问题的基本思路
以可能未曾想过的方式解决问题
3. 支持正则表达式
操作系统
文本编辑工具
主流编程语言
4. 学习过程
    照猫画虎--融会贯通
5.比较异同
    正则表达式 regular expression
    通配符  wildcards

参考

《鸟哥的私房菜》
《精通正则表达式》

blogroll

social