php正则表达式不含4,正则表达式(4)---PHP中的使用

PHP中的正则引擎有preg、ereg、mb_ereg三种。一般情况下,preg的速度和功能方面要强于其他两个,本文只讲preg(Perl Regulai Expressions),preg使用的是NFA引擎。

提取/提取邮箱

构造正则表达式如下

w+@w+(?:w+)+

注1:尽管 newnius.cn@gamil.com 这也是一种有效的邮箱格式但是为了表达式简单,我不打算去支持它。

注2:关于正则表达式中的元字符,请参考正则表达式(1)—初识正则与元字符

PHP的实现代码1

2

3

4

5$regex='/\w+@\w+(?:\.\w+)+/i';

if(preg_match($regex, $text, $matches))

{

var_dump($matches);

}

注1:preg_match() 函数第一个参数是正则表达式,第二个是需要解析的文本,第三个是存储捕获的文本存储变量,第三个变量可以省略。返回值是boolean类型。表示是否存在匹配。

注2:前后的“/”表示分隔符,必须有,详细见后。

注3:preg_match()函数只能匹配并捕获到一组符合条件的字符串,如果提取出所有匹配的,需要用到preg_match_all(),函数,参数与preg_match()相似,返回值是int,表示匹配的个数。

注4:最后的i表示不区分大小写

注5:php中尽量使用单引号表示字符串不然会出现很多奇怪的错误,见php中的单引号与双引号

替换邮箱

负责人的邮箱换了,要更新网站上的联系邮箱。由于网站编写时是纯静态页面,一张一张页面改着实麻烦,这时候就需要用到正则表达式的替换功能。

还是那个正则表达式,更改后的邮箱地址是input@newnius.com

PHP实现代码

preg_replace($regex, ‘input@newnius.com’,$text);

注1:$regex是正则表达式,中间是替换的文本,$text 是待处理的文本

注2:返回值是替换后的字符串

有时候,我们提取出来邮箱地址并不是更改成同一个,而是要经过很多步的处理,这时候正则表达式就有点力不从心了。PHP中的正则表达式还提供了另一个函数,专门用以解决这种问题。

1

2

3

4

5function handle_email($email)

{

return 'input@newnius.com';

}

var_dump(preg_replace_callback($regex,'handle_email',$text));

注1:preg_replace_callback() 表示将提取到的匹配项传递给 自定义函数处理,后者则返回替换后的文本。

注2:’handle_email’ 是自定义函数的名称,以字符串类型传递,有且仅有一个参数,并且有返回。

其他应用,解析字符串形式的数组

例如,将“newnius,jlu,csw”解析为数组(元素以“,”分隔),方便进一步处理。

尽管用explode() 也能完成任务,但是如果面对复杂一点,不固定的分隔符,explode()就有点无能为力了。

1var_dump(preg_split($regex, $text));

注1:preg_spilt() 与explode()类似,但是在应对不固定的分隔符方面更加灵活

注2:返回值是分割之后的数组,如果分隔符之间没有内容,也会有返回。

关于PHP正则表达式中的分隔符

Preg引擎要求正则表达式两端必须有分隔符,因为设计者希望它看起来更像perl,尤其在模式修饰符的使用方法上更是如此。有的程序员觉得在正则表达式两端添加分隔符简直是多此一举,但是无论好还是不好,规定就是规定。

常见的做法是使用斜线作为分隔符,不过我们还可以用除了字母、数字、反斜线和空白字符之外的任何ascll字符作为分隔符。最常见的是一对斜线,但两个“!”和“#”也很常见。我们可以选择使得语句不那么难以阅读的分隔符。

更多关于preg引擎的内容可以参考PHP官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值