php 正则表达式界限符

问题:正则表达式“|<[^>]+>(.*)</[^>]+>|U”里的一对竖线“|”和 U 分别代表什么?

答案:一对竖线“||”是正则表达式的界限符。大家最熟悉的的界限符应该是一对斜杠‘’//‘’,如“/^[a-z]+$/”,实际上在 PHP 语法中,正则表达式的界限符可以用任何其他字符来代替斜杠,如:

<?php
if(preg_match('/<[^>]+>(.*)<\/[^>]+>/U', '<a href="http://www.baidu.com">Go</a>')) { // 常见的写法,表达式中的斜杠要用 “\” 转义一下
    echo 'match!!!<br />';
}

if(preg_match('|<[^>]+>(.*)</[^>]+>|U', '<a href="http://www.baidu.com">Go</a>')) { // 本文的写法
    echo 'match!!!<br />';
}

if(preg_match(',<[^>]+>(.*)</[^>]+>,U', '<a href="http://www.baidu.com">Go</a>')) { // 用逗号代替斜杠
    echo 'match!!!<br />';
}

if(preg_match('#<[^>]+>(.*)</[^>]+>#U', '<a href="http://www.baidu.com">Go</a>')) { // 用井号代替斜杠
    echo 'match!!!<br />';
}

// 全部输出match!!!

不用斜杠作为正则表达式的好处是:正则表达式中斜杠‘/’不用转义‘\/’。


修饰符 U 的作用和问号“?” 类似,用于设置"贪婪模式"。

正则表达式默认是贪婪的,比如你上面的 (.*)<,不贪婪的情况下遇到第一个 < 就停止了,贪婪的情况下让 . *匹配所有内容,直到最后一个 < 出现。 

更多的 PHP 正则表达式修饰符请参考这篇博文:http://my.oschina.net/banbo/blog/308073

转载于:https://my.oschina.net/banbo/blog/139109

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值