匹配字符边界
如果想匹配字符的边界,边界包括空格、标点符号、换行等,可以使用正则表达式的匹配字符边界修饰符如下。
符号 | 说明 |
---|---|
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束,忽略换行符 |
$status = preg_match('/^baidu$/', 'houdunren');
var_dump($status); //返回真
以上案例是以baidu开头结尾的,只能匹配本身
选择修释符
| 这个符号带表选择修释符,也就是 | 左右两侧有一个匹配到就可以。
下面是通过选择修释符将域名修改为 taobao
$str="http://www.baidu.com 百度 http://www.sina.com 新浪";
$reg='/\.(baidu|sina)/';
$replace='.taobao';
$reg_1=preg_replace($reg, $replace, $str);
重复匹配
如果要重复匹配一些内容时我们要使用重复匹配修饰符,包括以下几种。
因为正则最小单位是元字符,而我们很少只匹配一个元字符如a、b所以基本上重复匹配在每条正则语句中都是必用到的内容
符号 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
var_dump(preg_match('/^.*$/', '')); //* 零个及空字符串也是可以的 var_dump(preg_match('/^[0-9]+$/', '1976')); // 返回真 var_dump(preg_match('/^9?$/', '99')); // 返回假 var_dump(preg_match('/^9{2}$/', '99')); // 返回真 var_dump(preg_match('/^[0-9]{2,}$/', '123')); //返回真 var_dump(preg_match('/^[0-9]{2,3}$/', '1234')); // 返回假,只能2~3位
禁止重复匹配
正则表达式在进行重复匹配时,默认是贪婪匹配模式,也就是说会尽量匹配更多内容,但是有的时候我们并不希望他匹配更多内容,这时可以通过?进行修饰来禁止重复匹配。
符号 | 说明 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
$str = '123456'; preg_match('/\d+?/',$str,$matches); print_r($matches);
因为增加了 ?
所以只匹配数字1
下面是使用禁止贪婪符替换将h1标签内容倾斜处理
$str = "<h1>你好</h1><h1>大叔</h1>"; $preg = '/<h1>(.*?)<\/h1>/'; $replace = '<h1><em>\1</em></h1>'; echo preg_replace($preg,$replace,$str);
下面是替换h1-h6标签内容,就不需要使用禁止贪婪符了
$str = "<h1>你好</h1><h2>大叔</h2>"; $preg = '/<h([1-6])>(.*)<\/h\1>/'; $replace = '<h\1><em>\2</em></h\1>'; echo preg_replace($preg,$replace,$str);
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接