正则表达式的学习
来源:互联网 发布:小米手机淘宝商城 编辑:程序博客网 时间:2024/06/03 12:37
正则表达式学习心得
字符缩略表示:
\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:)
(?#)
分组和捕获
符号
名称
简介
()
分组
(?)
命名分组
(?:)
只分组,不捕获
(?>)
固化分组
|
逻辑或
*
量词
指前面的内容可以重复0次或多次
+
量词
指前面的内容可以重复1次或多次
?
量词
指前面的内容可以重复0次或1次
{n}
量词
指前面的内容必须重复n次
{n,}
量词
指前面的内容至少出现n次
{x,y}
量词
指前面的内容至少出现x次,最多出现y次
*?
忽略优先级量词
量词“*”的忽略优先匹配
+?
忽略优先级量词
量词“+”的忽略优先匹配
??
忽略优先级量词
量词“?”的忽略优先匹配
{n}?
忽略优先级量词
量词“{n}”的忽略优先匹配
{n,}?
忽略优先级量词
量词“{n,}”的忽略优先匹配
{x,y}?
忽略优先级量词
量词“{x,y}”的忽略优先匹配
(?ifthen|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>,感觉超赞!
使用的正则表达式
.+
简介:应为匹配的是Html标记,所有必须将我们期望匹配的标记写下来如:。这个正则表达式中的”.“号表示任何字符,那么”.+“就表示任何字符至少出现一次。综合上面的描述,我们的正则表达式的意思就是:在中有内容的字符串,即”精通正则表达式<\b> “。
例子7 匹配嵌套的Html标记
被匹配的文本
最近我看了一本关于正则表达式的书:精通正则表达式<\b>,感觉超赞!
使用的正则表达式
((?!).)+?
简介:该正则表达式能匹配文本”精通“,这个正则表达式比较复杂。它包含3部分:首先它必须保证匹配文本是以符号”
“开头并以”“结尾。然后就是”(?!
.)“,这部分表示匹配内容的右边部分不应该出现文本”
“,最后一部分”+?“,这部分表示降低前面内容在匹配时的优先级,即降低”(?!
.)“匹配时候的优先级。综合上面的描述,我们的正则表达式的意思就是:匹配最里面的用标记括起来的内容。
例子8 匹配超级链接中的href属性值
被匹配的文本
百度
使用的正则表达式
.*
简介:该正则表达式能够匹配超级链接标记,并能提取出href属性的内容(提取方法后面会介绍)。该正则表达式共分3部分:第一部分是”.*“该部分确保我们匹配成功的文本是超级链接标记。第二部分”.+“,该部分确保在匹配属性”href“时忽略一些没必要的属性。第三部分”href=("[^"]*"|'[^']*'|[^"']).*“表示我们期望提取的”href“属性的内容。href属性里面的内容可以为三种情况:”href=http://www.baidu.com“或”href="http://www.baidu.com"或“http='http://www.baidu.com'”。我们分别用“[^"']*”,“"[^"]*"”,“’[^']*'”来表示这三类情况并用“|”符号表示他们之间的出现关系。
例子9 在一串数字字符中,匹配邮政编码。
被匹配的文本
123456789012343000234567
使用的正则表达式
\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中的访问路径和访问文件的扩展名。
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 正则表达式的学习
- 地图在加载大数据量的mark的解决方…
- openlayers之cluster——加载大数据…
- HTML4和HTML5的10个关键区别
- url转义字符
- 蓝桥杯 算法练习 传球游戏
- 正则表达式的学习
- 将YCB模型库中的obj格式文件导入VREP并保存为ttm文件
- JQuery之append和appendTo的区别,…
- HTML5 WebSocket 技术介绍
- 实用GIS网站收集
- jquery 遍历指定table下的所…
- 调试兼容ie6.7.8.9.10总结
- JS定时器例子讲解
- 关于table的rowspan进行布局