网站首页 > 技术文章 正文
在实际开发中经常会看到正则表达式的身影,这里我来总结一下正则表达式中每一部分具体都是什么含义,我这里介绍的是php中的正则表达式,简单的说php中有两套正则,其功能差不多:
1)由PCRE库提供的函数,以preg_为前缀命名。
2)由POSIX扩展提供的函数,以ereg_为前缀命名。php5.3以后就不推荐使用这种函数库了。下面介绍的主要是第一种正则表达式。
正则表达式的三个组成部分:分隔符、表达式和修饰符。
分隔符可以是除字母、数字、反斜线以及空白符以外的任何字符,通常用正斜线做分隔符。
下面介绍各个元字符的含义:
1.^ 匹配以某个字符串开头的字符串,比如 ^once可以匹配onceabc、onceeee、once432等等。
2.$ 可以匹配以某个字符串结尾的字符串,比如once$ 匹配345once、abconce、tttonce等等。
3.^once$ 明白了前两个这个就不难搞清楚了,只能匹配once。
4.如果说只有一个”/once/”没有任何其他符号呢, 那就可以匹配的多了。只要字符串中含有once就可以匹配。比如2333once3232等等。
5.英文句号”.”可以匹配除了换行符\n外的所有单个字符,要注意是单个字符哦。比如正则表达式b.s,就可以匹配bis、bes、bus、b#s甚至b s等等。
6.中括号[]表示只可以匹配[]内包含的单个字符,注意也是单个字符。比如
b[euis]s,只能匹配 bes、bus、bis、bss四个,其他的都不能匹配了。
7.或操作字符”|”,完成两项或多项之间的匹配,通常与( )搭配使用,比如b(a|o|u|oo)s就可以匹配bas、bos、bus、boos四个。如果使用[]就只能匹配其中的单个字符,而使用|则可以在单个与多个字符之间选择。
8.表示其左边的表达式出现0次或多次。比如pe*就匹配peaa、pee123、port等,左边的表达式是e(紧挨着的那个)可以出现也可以不出现,port就没有出现e,照样可以匹配它。
9.+表示左边的表达式出现1次或多次。比如pe+就匹配pe、pear、peeaa等等。+左右的表达式是e至少要出现1次或者多次才可以,这里port就不能在匹配的上了。
10.?表示左边的表达式出现0次或1次。比如pe?匹配pe、port、pear等。?左边的表达式e只能出现0次或1次,所以不能匹配peear了。
11.{n}表示其左边的表达式出现n次,比如a{3}匹配的是aaa、123aaa33、aaaasfds等等。
12.{n,}表示其左边的表达式出现n次或多次。即至少n次,比如a{3,}匹配aaa、aaaaadfa等等。
13.{n,m}表示其左边的表达式出现n-m次。即至少出现n次至多出现m次,比如a{1,3}匹配a 、aa、aaa、aadfgdsd等等。
14.有时我们会遇到\w,可以匹配任意单个字母或数字或下划线或汉字。
15.\W 正好是\w的反义词,表示非字母数字下划线汉字的任意单个字符。
16.\d 表示任意单个数字。同理 \D表示非数字外的任意单个字符。
17.\s 匹配不可见字符,比如空格制表等。同理$表示可见字符。
18.\b 匹配字符串边界,同理\B匹配非边界。
19.\A 匹配以某个字符串开头的字符串。\Z 匹配以某个字符串结尾的字符串。这里可能有人要有疑问了,这和^和$有什么区别呢,原来多行模式下^和\$会对每行的行首和行尾也进行匹配。而\A和\Z则只匹配字符串的开头和结尾。
常用的模式修饰符:
i 表示忽视大小写就行匹配。
m 多行模式,刚才已经介绍过了,正常情况下^和$只匹配字符串的开头和结尾,如果是多行模式,那么也会匹配行首和行尾。即每一行的开头就是^,结尾就是$。
s 单行模式,表示忽视换行符,把换行符也当做普通字符来对待。变化最大的是 . 这个符号,正常情况下它匹配的是除换行符以外的任意单个字符,如果是单行模式,那么 . 也可以匹配换行符\n了。
U 懒惰模式,表示尽量可能少的匹配。
D 结尾限制 这种模式下,结尾不能出现换行符。正常情况下once$是可以匹配once\n这样的字符串的,如果是D模式下,这种情况会匹配失败
u 中文修饰符,如果有中文情况下,通常使用这种模式。
介绍到这里,正则表达式的基本语法就介绍完了,实际编程中我们遇到的正则表达式无非就是上述几种形式的组合版,即使这样我们理解起来也不是那么简单。需要通过我们多分析他们才能慢慢的提高如何去书写正确的正则表达式。下面举简单的几个例子介绍一些稍微复杂的正则表达式并分析:
1.^[a-zA-Z0-9_]{1,}$匹配所有的单个或多个由字母数字下划线组成的字符串。
2.^[0-9]{1,}$匹配所有的正整数。
3.^-[0-9]{1,}\$匹配所有的负数,负号前面要加转义字符“\”.
4.验证是否为合法的手机号码的正则表达式:
^[1][358][0-9]{9}\$ 第一位必须是1,第二位只能是358,后面9位可以是任意组合。
5.验证是否为合法的邮箱格式的正则表达式:
^([a-zA-Z0-9-_])+@[a-zA-Z0-9-_]+(.[0-9a-zA-Z]{2,4})+\$
6.ip地址的正则表达式:
((2[0-4]\d | 25[0-5] | [01]?\d\d?).){3}(2[0-4]\d | 25[0-5] | [01]?\d\d?)
原文地址
http://blog.csdn.net/u013111221/article/details/50952619
- 上一篇: 别再把shell中命令行的glob当做正则了
- 下一篇: 小心别落入正则回溯陷阱(正则表达式回溯陷阱)
猜你喜欢
- 2025-03-20 正则表达式学习之替换分组练习(正则匹配并替换)
- 2025-03-20 「正则表达式」 一、正则表达式字符匹配(前端必懂 )
- 2025-03-20 人人都看得懂的正则表达式教程(正则表达式 详解)
- 2025-03-20 这几种正则表达式的“字符集合”,想要入门regexp函数,必须了解
- 2025-03-20 这几个冷门到你没听过的App,好用到为你打开新世界大门
- 2025-03-20 java正则-取出指定字符串之间的内容
- 2025-03-20 正则表达式 量词(正则表达式子表达式)
- 2025-03-20 Excel VBA【案例】正则表达式提取中文字符/五笔字型编码文本整理
- 2025-03-20 小心别落入正则回溯陷阱(正则表达式回溯陷阱)
- 2025-03-20 别再把shell中命令行的glob当做正则了
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)