`
hulianwang2014
  • 浏览: 681078 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

正则表达式 入门 -- 简单字符匹配、元字符

 
阅读更多

好的工具可以提高工作效率,正则表达式绝对是这其中一员。最近抽时间大概了解了一下这方面的知识,整理了一下自己的一些笔记,文中示例通过vim编辑器来演示,匹配到的字符为黄色高亮显示,并在下面注明了显示结果。


首先,正则表达式的定义:一些用来匹配和处理文本的字符串

主要用途:搜索,替换


在正式开始之前,有一点需要特别强调:正则表达式的语法很容易掌握,但是真正的挑战是如何运用那些语法把实际问题分解为一系列正则表达式并最终解决,必须通过自己多多实践才能掌握。


1. 匹配单个字符

下面一个示例就是普通的文本匹配,我在vim中默认大小写敏感,这样我们可以观察正则表达式的表现。事实证明,正则表达式是大小写敏感的。


上面例子中,第1 4两行是高亮的,显示效果不太好,将就看下吧。


下面示例一个通配符'.'的用法

.字符(英文符号)可以匹配任何一个单一的字符、字母、数字、甚至是.本身。但是在绝大多数的正则表达式实现里,不能匹配换行符。

上面例子中,只有第4行是高亮的。


在同一个正则表达式中,允许使用多个.字符,可以连续,也可以间隔出现。

\. \是转义字符,\.意思是匹配.本身,而不是任意字符

上面例子中,第1 3两行是高亮的。


2. 匹配一组字符

这个主要通过字符集的方式来实现。用[]来定义一个字符集

字符集只能匹配特定的字符和字符区间

字符集的匹配结果是:能够与该字符集中的任何一个成员相匹配的文本

字符区间用'-'来定义,例如[0-9],表示0,1,2,。。。9 10个阿拉伯数字

常用字符区间有[a-z], [A-Z], [0-9]。但是[A-z]不常用,因为它除了包含26个英文字母的大小写,还包括[ ^等在ASCII字符表中排列在Z和a之间的字符。如果想匹配26个英文字母的大小写,那么可以用[a-zA-Z]这样的形式。


上面的例子中,可以看到前两行是高亮的

'-'是一个特殊的元字符,用在[]中,作为元字符,在其他地方,只是一个普通的字符,只能与本身匹配,并且不需要转义


取非匹配:^, [^0-9], ^的效果作用于给定字符集合中的所有字符或字符区间,而不仅限于在^字符后面的那一个字符或字符区间。


上面例子中,只有第4行是高亮的。


3. 元字符

其实上面已经提到这个概念了,用在[]中的'-'是元字符。

元字符要匹配本身的话,需要用\来进行转义。

空白元字符:

[\b] 回退(并删除)一个字符(backspace键)
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符


\s 任何一个空白字符,等价于[\f\n\r\t\v]
\S 任何一个非空白字符,等价于[^\f\n\r\t\v] 注意:[\b]不包含在内


首先,在vim中使用:set list命令来使空白字符显示出来,


可以看到所有的$都高亮了。

btw,试了一下\s,好像vim的正则实现不支持这个。


数字元字符:

\d 任何一个数字字符,等价于[0-9]
\D 任何一个非数字字符,等价于[^0-9]


前3行中的几个数字都高亮了。

字母数字元字符

常用于匹配各种名字(如文件名,子目录名,变量名,数据库对象名等等)
\w 任何一个字母数字字符(大小写均可)或下划线字符,等价于[a-zA-Z0-9_]

\W 任何一个非字母数字或下划线字符,等价于[^a-zA-Z0-9_]


根据字符的16进制表示来匹配
16进制:\x0a == \n,ascii字符10
8进制: \012 等价于上面


这个在vim中不支持,试了一下不行。


POSIX字符类:

[:alnum:] 任何一个字母或数字,等价于[a-zA-Z0-9]
[:alpha:] 任何一个字母,等价于[a-zA-Z]
[:blank:] 空格或制表符,等价于[\t ]
[:cntrl:] ASCII控制字符(ASCII0-31,再加上ASCII127)
[:digit:] 任何一个数字,等价于[0-9]
[:graph:] 跟[:print:]一样,但不包括空格
[:lower:] 任何一个小写字母,等价于[a-z]
[:print:] 任何一个可打印字符
[:punct:] 既不属于[:alnum:],也不属于[:cntrl:]的任何一个字符
[:space:] 任何一个空白字符,包括空格,等价于[\f\n\r\t\v ]
[:upper:] 任何一个大写字母,等价于[A-Z]
[:xdigit:] 任何一个16进制数字,等价于[a-fA-F0-9]

使用时注意[0-9] == [[:digit:]],POSIX字符类,必须是[[ ]] 括起来的。


这个结果跟上面的那个用\d的效果一样,也是前3行的数字都高亮了。


本篇文章,就简单地先介绍一下正则表达式的简单应用,改天再写一篇进阶版。


水平有限,如果有朋友发现错误,欢迎留言交流

分享到:
评论

相关推荐

    Java中的正则表达式 -- 示例详解

    大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则...

    正则表达式30分钟入门

    学习正则表达式快速入门的法宝。 语言深入浅出,举例实用、典型。 1、本文目标 2、如何使用本教程 3、正则表达式到底是什么东西? 4、入门 5、测试正则表达式 6、元字符 7、字符转义 8、重复 9、字符类 10、分枝条件...

    正则表达式入门

    • 本文目标 ...• 元字符 • 字符转义 • 重复 • 字符类 • 分枝条件 • 反义 • 分组 • 后向引用 • 零宽断言 • 负向零宽断言 • 注释 • 贪婪与懒惰 • 处理选项 • 平衡组/递归匹配

    正则表达式30分钟入门教程

    6. 元字符 7. 字符转义 8. 重复 9. 字符类 10. 分枝条件 11. 反义 12. 分组 13. 后向引用 14. 零宽断言 15. 负向零宽断言 16. 注释 17. 贪婪与懒惰 18. 处理选项 19. 平衡组/递归匹配 20. 还有些什么...

    正则表达式30分钟入门教程 chm

    元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 最后,来点广告... 网上的资源及本文...

    正则表达式 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。

    30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在...元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配

    Java正则表达式入门

    大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则...

    精通正则表达式~~~

    第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于有部分经验的读者... 6 检索文本文件:Egrep. 6 ...

    正则表达式学习教程

    清除格式 文本格式约定:专业术语 元字符/语法格式 正则表达式 正则表达式中的一部分(用于分析) 对其进行匹配的源字符串 对正则表达式或其中一部分的说明 隐藏边注 本文右边有一些注释,主要是用来提供一些相关信息...

    Python基础入门知识之正则表达式学习 正则表达式30分钟入门教程 共21页.pdf

    六、 元字符 7 七、 字符转义 9 八、 重复 9 九、 字符类 9 十、 分枝条件 10 十一、 分组 11 十二、 反义 12 十三、 后向引用 12 十四、 零宽断言 14 十五、 负向零宽断言 15 十六、 注释 16 十七、 贪婪与懒惰 16 ...

    [精通正则表达式(第三版)]

    第 1 章 正则表达式入门 29 解决实际问题 30 作为编程语言的正则表达式 32 以文件名做类比 32 以语言做类比 33 正则表达式的思维框架 34 对于有部分经验的读者 34 Egrep元字符 36 行的起始和结束 36 字符组...

    正则表达式基础入门教程

    正则表达式基础入门教程 1. 本文目标 2. 如何使用本教程 3. 正则表达式到底是什么? 4. 入门 5. 测试正则表达式 6. 元字符 7. 字符转义 8. 重复 9. 字符类 10. 反义 11. 替换 12. 分组 13. 后向引用 14...

    正则表达式必知必会pdf

    目录 · · · · · ·第1章 正则表达式入门1.1 正则表达式的用途1.2 如何使用正则表达式1.3 什么是正则表达式1.4 使用正则表达式1.5 在继续学习之前1.6 小结第2章 匹配单个字符2.1 匹配纯文本2.2 匹配任意字符2.3 ...

    正则表达式30分钟入门教程.mht

    本文目标 如何使用本教程 正则表达式到底是什么东西?...元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配

Global site tag (gtag.js) - Google Analytics