`
feiliboos
  • 浏览: 664478 次
文章分类
社区版块
存档分类
最新评论

正则表达式学习心得

 
阅读更多

正则表达式学习心得

记得刚开始接触正则表达式的时候感觉这东西非常非常的难,用一堆莫名奇妙的符号来干活。而且这些莫名奇妙的符号又非常非常的不友好,让人看了就没有想学习它的冲动。可以编程学习的深入,越来越觉得正则表达式是个好东西啊,有种一定要占有它的冲动,由于种种原因让我学习正则表达式的计划一拖再拖,虽然这些原因多半是自己照成的。庆幸我对正则的学习热情并没有减退,总于上天给了额这么一个机会,终于我的正则表达式学习开启了。

在正则表达式的世界里分很对的流派,如:.net,java,perl,javascript等。这些流派对正则表达式提供的支持都稍有不同。在这些流派里我主要学习了.Net流派下的正则表达式,下面我来聊聊在.Net下正则表达式能干什么。

学习一门新的语言首先得熟悉下它的关键字,我想大家应该和我一样吧。好吧,我们来看看.Net流派里的正则表达式都用些什么关键字吧:

字符缩略表示:

\a [\b] \e \f \n \r \t \v \octal \x## \u## \cchar

符号

名称

简介

\a

[\b]

退格符号

只能在字符组中使用

\e

\f

\n

\r

\t

\v

\octal

转义用8进制表示的字符

\x##

转义2位16进制的字符

\u####

转义4位16进制的字符

\cchar

字符组及相关结构

符号

名称

简介

[]

字符组

[^]

排除型字符组

.

通配符号

代表任意字符

\w

通配符号

代表字母类型的字符

\d

通配符号

代表数字类型的字符

\s

通配符号

代表空格类型的字符

\W

通配符号

代表非字母类型的字符

\D

通配符号

代表非数字类型的字符

\S

通配符号

代表非空格类型的字符

\p{Prop}

锚点

符号

名称

简介

^

锚点

一行开头的位置

\A

锚点

字符串的开头位置

$

锚点

一行结束的位置

\z

锚点

字符串结束的位置

\Z

锚点

字符串结束的位置

\G

锚点

上次匹配成功的位置

\b

锚点

单词分界符

\B

锚点

单词分界符

(?=)

锚点

顺序循环,匹配点右边的位置

(?!)

锚点

顺序否定循环,匹配点右边的位置

(?<=)

锚点

逆序循环,匹配点左边的位置

(?<!)

锚点

逆序否定循环,匹配点左边的位置

注释及模式修饰符

符号

名称

简介

(?XX-XX)

(?XX-XX:)

(?#)

分组和捕获

符号

名称

简介

()

分组

(?<name>)

命名分组

(?:)

只分组,不捕获

(?>)

固化分组

|

逻辑或

*

量词

指前面的内容可以重复0次或多次

+

量词

指前面的内容可以重复1次或多次

?

量词

指前面的内容可以重复0次或1次

{n}

量词

指前面的内容必须重复n次

{n,}

量词

指前面的内容至少出现n次

{x,y}

量词

指前面的内容至少出现x次,最多出现y次

*?

忽略优先级量词

量词“*”的忽略优先匹配

+?

忽略优先级量词

量词“+”的忽略优先匹配

??

忽略优先级量词

量词“?”的忽略优先匹配

{n}?

忽略优先级量词

量词“{n}”的忽略优先匹配

{n,}?

忽略优先级量词

量词“{n,}”的忽略优先匹配

{x,y}?

忽略优先级量词

量词“{x,y}”的忽略优先匹配

(?if then|else)

我没说错吧,确实是一堆让我看的莫名奇妙的符号哈。没关系在接下来的介绍中我会详细的介绍上面的这些莫名奇妙的符号。

做为程序员的我总喜欢在学习一项新技能后研究它的使用方法和琢磨什么时候用它会比较好。在接下来的总结中,我就用例子来带动学习吧。

例子1 如何用正则表达式匹配中国的邮政编码

被匹配的文本:

330000

使用的正则表达式:

\d{6}

简介:这里我用\d{6}来匹配咱们的邮政编码,\d这个关键字在正则表达式的世界里代表着"数字字符",即如下字符:1,2,3,4,5,6,7,8,9,0。接在\d后面的关键字{6}代表着前面的\d符号必须出现六次。综合下,这个正则表达式要表达的意思就是:必须连续6位都为数字的字符串才能成功匹配,如字符串"343000"。

例子2 如何用正则表达式匹配出生日期

被匹配的文本:

1987-01-01或1986-05-8或1985-6-4

使用的正则表达式:

\d{4}-\d{1,2}-\d{1,2}

简介:我们期望匹配的文本中,生日的年份,月份,日期都用符号“-”来分割,这部分是确定的,所以我们在正则表达式中也写死该符号必须出现在年份,月份和日期中。但是生日的月份和日期可能用2个数字来描述“05”也可能用一个数字来描述“1”。所以这里我们使用了\d{1,2}。\d{1,2}表示,数字最少出现1个,最多出现2次。

例子3 在一串字符中匹配金钱文本

被匹配的文本:

今天我买了件T恤花了我76.88块钱。

我今天花了50.5块钱买了一顶帽子。

我午餐一共花了15块钱。

使用的正则表达式:

\d+\.\d*

简介:在3个文本中都出现了金钱文本:“76.88”,“50.5”,“15”。但他们还是有差异的:证书部分是必须出现的,小数部分的内容是可能出现的,小数部如果出现则可能为一位数字也可能为两位数字。正则表达式“\d+\.\d*”刚好能将这种情况给解决了。\d+在这里用来描述整数部分,“+”表示前面的内容至少出现一次。“\.”表示小数点,因为“.”在正则表达式中是关键字,所以我们不能直接用“.”号来表示小数点,我们必须将它转义。“\d*”用来描述小数部分,"*"表示可能出现很多次,也可能一次都不出现。综合上面的解释,我们的正则表达式要描述的意思就是:整数部分至少出现一位,小数部分可以出现一位,两位或没小数部位。

例子4 在一串文本中匹配联通的手机号码

被匹配的文本:

逍遥哥的手机号码是13510897654,逍遥妹的手机号码是13090876576。

使用的正则表达式:

(130|131|132|155|156|185|186)\d{8}

简介:应为联通的手机号码的开头三位只能是:130,131,132,155,156,185,186所以我们用“|”表示他们都可能出现,我们把130|131|132|155|156|185|186放入到“()”中,将这些内容作为一个整体独立出现。综合上面的解释,我们的正则表达式要描述的意义就是:联通的手机号码可以分两部分:开头的3为数字和后面的8位数字。如果开通的3为数字符合联通号码的命名标准则就匹配它。

例子5 匹配中国的身份证编号

被匹配的文本

36240119880105102x 或 362401196002451049

使用的正则表达式

\d{17}[0,1,2,3,4,5,6,7,8,9,X]

简介:“[0,1,2,3,4,5,6,7,8,9,X]”表示“[]”里面放的用逗号隔开的内容都可能出现。综合上面的解释,我们的正则表达式要描述的意思就是:身份证号码分两部分来进行匹配,第一部分为17位的数字,后一部分为1位数字或一个x。(这个正则表达式只是用来学习,正则用来匹配身份证还是不够成熟)

例子6 匹配Html标记

被匹配的文本

最近我看了一本关于正则表达式的书:<b>精通正则表达式<\b>,感觉超赞!

使用的正则表达式

<b>.+</b>

简介:应为匹配的是Html标记,所有必须将我们期望匹配的标记写下来如:<b></b>。这个正则表达式中的”.“号表示任何字符,那么”.+“就表示任何字符至少出现一次。综合上面的描述,我们的正则表达式的意思就是:在<b></b>中有内容的字符串,即” <b>精通正则表达式<\b> “。

例子7 匹配嵌套的Html标记

被匹配的文本

最近我看了一本关于正则表达式的书:<b><b>精通</b>正则表达式<\b>,感觉超赞!

使用的正则表达式

<b>((?!<b>).)+?</b>

简介:该正则表达式能匹配文本”<b>精通</b>“,这个正则表达式比较复杂。它包含3部分:首先它必须保证匹配文本是以符号”<br>“开头并以”</b>“结尾。然后就是”(?!<br>.)“,这部分表示匹配内容的右边部分不应该出现文本”<br>“,最后一部分”+?“,这部分表示降低前面内容在匹配时的优先级,即降低”(?!<br>.)“匹配时候的优先级。综合上面的描述,我们的正则表达式的意思就是:匹配最里面的用<b></b>标记括起来的内容。

例子8 匹配超级链接中的href属性值

被匹配的文本

<a target="_blank" href="http://www.baidu.com">百度</a>

使用的正则表达式

<a.+?href=("[^"]*"|'[^']*'|[^"']).*>.*</a>

简介:该正则表达式能够匹配超级链接标记,并能提取出href属性的内容(提取方法后面会介绍)。该正则表达式共分3部分:第一部分是”<a>.*</a>“该部分确保我们匹配成功的文本是超级链接标记。第二部分”.+“,该部分确保在匹配属性”href“时忽略一些没必要的属性。第三部分” href=("[^"]*"|'[^']*'|[^"']).* “表示我们期望提取的”href“属性的内容。href属性里面的内容可以为三种情况:”href=http://www.baidu.com“或”href="http://www.baidu.com"或“http='http://www.baidu.com'”。我们分别用“[^"']*”,“"[^"]*"”,“’[^']*'”来表示这三类情况并用“|”符号表示他们之间的出现关系。

例子9 在一串数字字符中,匹配邮政编码。

被匹配的文本

123456789012343000234567123456343001098765343002123456876543

使用的正则表达式

\G((?!34)\d\d\d\d\d\d)*?(34\d\d\d\d)

简介:这里的那串数字应该是以6的倍数出现的,按理来说它们应该都是邮政编码。我们要做的就是通过正则表达式将我们期望获取的邮政编码个筛选出来。我们希望每6位每6位的进行匹配。这里我们需要用到一个技巧,使用忽略优先级能完成我们的需要“((?!34)\d\d\d\d\d\d)*?”。它在每次匹配的时候会保存一个快照,然后直接略过6个数字进行。如果能成功匹配则继续,否则返回到这6个数字的匹配位置继续匹配。最后我们还使用了“\G”,这样可以防止在匹配到字符串尾部的时候由于没能完成匹配而进行的无用回溯。

例子10 匹配URL中的路径和访问文件的扩展名

被匹配的文本

http://www.helloworld.com/demo/helloworld/2011/09/26/index.html

使用的正则表达式

http(s)?://.+?([^/]+)(/.*\.(\w+))?

简介:首先用“http(s)?”限制访问的文件必须http协议的,然后用".+?[^/]+"来过滤url中的主机域名。最后通过“(/.*\.(\w+))”获取url中的访问路径和访问文件的扩展名。

分享到:
评论

相关推荐

    正则表达式学习心得 v1.0

    本文主要介绍了正则表达式方面学习的心得,包括Python,C#,PHP,Notepad++,Javascript等方面的使用心得,以及总结了各个语言间正则表达式的区别。

    正则表达式全解及正则表达式学习心得

    包含所有正则表达式的内容,还有个人的总结与心得!!!

    C#正则表达式使用心得

    正则表达式是用来检验和操作字符串的强大工具。简单的理解正则表达式可以认为是一种特殊的验证字符串。正则表达式常见运用是验证用户输入信息格式,比如上面的那组“\w{1,}@\w{1,}\.\w{1”,实际上就是验证邮件地址...

    个人 正则表达式 学习小结

    正则表达式学习小结 基础学习 正则表达式学习小结 基础学习

    正则表达式学习笔记总结

    以前学习了正则表达式,总结一下查找起来也很方便,包括各种常用字符串的验证:如邮箱等

    PHP 笔记001 - 字符串、正则表达式

    关于学习PHP中字符串与正则表达式的学习笔记、心得,如果需要就下载吧

    js正则表达式学习和总结(必看篇)

    下面小编就为大家带来一篇js正则表达式学习和总结(必看篇)。小编觉得挺不错的,希望对大家有所帮助。一起跟随小编过来看看吧,祝大家游戏愉快哦

    Python爬虫 正则表达式应用详解

    学习Python爬虫过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。 —— 正则表达式应用详解 —— 文章目录Python爬虫(二十一)—— 正则表达式应用详解 ——1. 简介2. 语法 1. 简介 ...

    浅谈PHP+正则表达式格式

    正则表达式格式 PHP变成的利器,经过一段时间的学习,浅谈一下自己的心得!!!!

    java正则表达式

    java正则表达式的学习教程以及心得体验

    Python爬虫 Re库与正则表达式的细节解析

    学习Python爬虫过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。 —— Re库与正则表达式的细节解析 —— 文章目录Python爬虫(二十三)—— Re库与正则表达式的细节解析 ——1. 麻烦...

    小议正则表达式效率 贪婪、非贪婪与回溯

    前几天看了鸟哥的BLOG上写的关于正则表达式的回溯与递归的限制时,对贪婪、非贪婪产生的回溯有疑问,遂近段时间,仔细的学习研究了一下,现在把经验心得与大家分享一下。

    PHP7实践指南:O2O网站与APP后台开发

    本书的核心内容包括:PHP基础语法、函数、面向对象编程、PHP类、常见的设计模式、正则表达式、PHP操作图像和文件、MVC架构思想、ThinkPHP框架、NoSQL与MySQL等。另外,还介绍了当前热点的O2O网站开发和App后台开发的...

    学习web服务端课程的心得体会以及实验记录,包括爬虫等内容.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    莫烦PYTHON——Python3基础教程 学习心得(4)

    学习心得(4)13 其他13.1 continue & break13.2 try 错误处理13.3 zip lambda map13.4 copy & deepcopy 浅复制 & 深复制13.5 threading 什么是多线程13.6 multiprocessing 什么是多进程13.7 什么是tkinter窗口13.8 ...

    python爬虫基础知识点整理

    Python正则表达式 Python爬虫框架Scrapy Python爬虫更高级的功能 1.Python基础学习 首先,我们要用Python写爬虫,肯定要了解Python的基础吧,万丈高楼平地起,不能忘啦那地基,哈哈,那么我就分享一下自己曾经看...

    Python-crawler:从头开始系统化的学习如何写Python爬虫。Python版本3.6

    re库正则表达式的使用 bs4爬虫实践:获取百度贴吧的内容 bs4爬虫实践:获取双色球中奖信息 bs4爬虫实践:排行榜小说批量下载 bs4爬虫实践:获取电影信息 bs4爬虫实践:悦音台mv排行榜与反爬虫技术 二:Scrapy...

    leetcode下载-LeetCode:蔬菜鸡试图变得更强壮

    leetcode下载 LeetCode 以后直接一个MD写完算了,多写点心得方便以后回来看 ...这个题和一样是正则表达式的dp,首选写法,但是dp的效率不如另外一种效率高 HARD贪心算法或者是BFS,想一下这个题为什么不是DFS,联动

    jQuery技术内幕:深入解析jQuery架构设计与实现原理

    并开发一些通用组件和接口来简化开发过程,可是很快又发现这款浏览器对正则表达式的支持非常粗糙,导致选择器引擎Sizzle根本无法运行。此时,对jQuery进行简单改造已经满足不了需求。 然而令人惊艳的是,这款浏览器...

    asp.net知识库

    XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET ...

Global site tag (gtag.js) - Google Analytics