进阶级-正则表达式

简述

正则表达式(regular expression):描述可能出现在用户提交的文本中的一小段代码,我们通过它,将出现的代码块替换为特殊格式。
正则表达式广泛好用,但入门困难。

语法规范

分隔符

目标代码块被分隔符包围,分隔符一般选用斜杠(/)或井号(#),也可以用除字母、数字和反斜杠之外的任何字符作为分隔符。反斜杠可以转义,转义在基础级文章略有提及,此处不赘述。

模式修饰符

默认情况下,正则表达式区分大小写,不过我们可以通过模式修饰符(pattern modified),使正则忽略大小写。
模式修饰符是一个单个的字符标志,跟在表达式的结束分隔符后。

符号注释
i匹配时,不区分大小写

特殊字符

符号-中文名—-注释
^脱字字符匹配字符串的开始,自身不包含任何字符,只考虑字符位置
$美元符号匹配字符串的结尾,同上
.点号通配符,匹配任何单个字符,除了换行(\n)
*星号要求前面的字符出现0或多次,具有贪婪属性1
+加号要求前面的字符出现1或多次,具有贪婪属性
?问号匹配前面的子表达式0次或1次,在*+的后面加上一个?就可以实现非贪婪(最小匹配,minimal match)
|管道符号正则匹配管道左或右边的模式
(…)圆括号标记一个子表达式的开始和结束位置。可对其应用一个修饰符,至于结束括号后即可
[…]方括号定义字符类(character class),匹配方括号列出的字符之一。在前方括号后加入^,即可匹配 除去方括号包含的字符

转义序列

(escape sequences)
意义:匹配不太容易输入的一个字符,或匹配某种类型的一个字符。

符号注释
\n换行字符
\r回车字符
\t制表符
\s空白字符(whitespace character),等同[\n\r\t]
\S非空白字符,等同[^\n\r\t]
\d数字,等同[0-9]
\D非数字,等同[^0-9]
\w单词字符,等同[a-zA-Z0-9_]
\W非单词字符,等同[^a-zA-Z0-9_]
\b表示单词边界(起始/结束)
\B表示非单词边界(非起始/结束)

PHP中的正则函数

preg_match:

用来确认一个特定的字符串,是否匹配一个正则表达式。

preg_replace:

接受一个正则表达式和一个文本字符串,并尝试在字符串中匹配该正则表达式。还接受另一个文本字符串,并用该字符串来替换每一次正则匹配。
preg_replace (regExp, replaceWith, OldString [, $limit = -1(无穷) [, int &$count ]] )
例子:

$test = preg_replace('/_([^_]+)_/', '<em>$1</em>');
// 每一个圆括号内,都包含了一个块内容,而块内容的名称按$1、$2……依次递增,在JScript 中则使用 $0…$9 属性。

str_replace:

搜索字符串而非正则表达式模式,类似preg_replace函数,但比之更为高效,对于不区别大小写的简单替换,可以用它来代替。

结语

正则表达式并没有那么容易,但无论如何,既然从事这个职业,既然爱上了编程和编程所涉及的部分方面,我们就应该去尽力做好,将正则写的优雅而易读,这并不能从技术上降低正规表达式的复杂性,但可以使它们更容易被理解
By the way,匹配中文字符的正则表达式: [\u4e00-\u9fa5]。

参考资料:1
《PHP&MySQL Novice to Ninja》(Kevin Yank [澳])
正则表达式 - 菜鸟教程
preg-replace - 官方手册


  1. 匹配时,*+会很贪婪(greedy)的包含尽可能多的字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值