欢迎各位兄弟 发布技术文章
这里的技术是共享的
//修饰符
i (忽略大小写)
g (全文查找出现的所有 pattern ,这个全局不懂什么意思),加上g后,好像 preg_match('/aa/g','','任意字符串') 替换后就是null
gi (全文查找、忽略大小写)
U 表示非贪婪匹配 ,匹配一次就中止了 (U好像是贪婪匹配) (可以100%的肯定 U的贪婪匹配)
m 将一个字符串视为多行 ^ 定位换行符之后的内容, $定位换行符之前的内容
s 表示 使用 小圆点匹配任意字符 ,包括 换行符 (\n)
\num num应该被赋予一个正数。与已经储存的部分比较。例:"(.)\1"和任意的两个连续的相同
文字一致。
{n} | 表达式重复n次,比如: "\w{2}" 相当于 "\w\w"; "a{5}" 相当于 "aaaaa" |
{m,n} | 表达式至少重复m次,最多重复n次,比如: "ba{1,3}"可以匹配 "ba"或"baa"或"baaa" |
{m,} | 表达式至少重复m次,比如: "\w\d{2,}"可以匹配 "a12","_456","M12344"... |
我知道 .* 是任意字符 但是又加了一个? 这个表示什么意思啊
是非贪婪模式
.*会匹配后面的一切字符,就是到结束的意思 加?后就是不贪婪模式,这时要看?后边的字符是什么了,如.*?"的意思是遇到双引号则匹配结束
. 匹配除 "\n" 之外的任何单个字符 * 匹配前面的子表达式零次或多次 ? 非贪婪匹配
/(<a.*?>).*?(<\/a>)/is 那么这个第二个的 .*? 表示的是中间不能出现 </a> 这样的字符吧?追答:
1、(<a.*?>)意思就是匹配全部超级链接的开始部分 2、.*?的意思应该是匹配链接的提示信息 3、(<\/a>)是链接的结束部分 4、i 匹配大小写 s 模式中的圆点元字符(.)匹配所有的字符,包括换行符 来自 http://zhidao.baidu.com/question/542892387.html
<?php
//把点后缀的文件名改成点html $lastPath = 'test.asp'; //或者 $lastPath = 'test.jsp'; $lastPath = preg_replace('/\..*?/misU',".html",$lastPath);
?>
<?php
$str ="http://mp.weixin.qq.com/s?__biz=MzA5NDExMDUxNA==&mid=2651195934&idx=5&sn=0a720735e6e0a4cba29e1f253fe2d6c6&3rd=MzA3MDU4NTYzMw==&scene=6#rd"; //把多个等号 替换为 一个等号//下面两行是等价的 都是把多个等号 替换为 一个等号//$url = preg_replace('/\=+?/misU',"=",$url);$url = preg_replace('/\={2,}/misU',"=",$url);var_dump($url); //$url 的结果为 http://mp.weixin.qq.com/s?__biz=MzA5NDExMDUxNA=&mid=2651195934&idx=5&sn=0a720735e6e0a4cba29e1f253fe2d6c6&3rd=MzA3MDU4NTYzMw=&scene=6#rd
?>
preg_replace_img_ok.php
<?php
/*
* Created on 2013-4-16
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
//下面这个肯定是好的
$str ="aa<img src='/uploads/allimg/121214/1-1212141439300-L.jpg' />bb<br/>
<br />".
"<br/><br/>"."aa<img src='/uploads/allimg/121214/1-1212141441370-L.jpg' />bb"."aa<img src='/uploads/130107/1-13010G92TOY-449-310.jpg' />bb";
//var_dump($str);
//$str = preg_replace('/<img(.*)src=["\']([^>]+)["\'](.*)\/>/migsU',"<img src='".getReferImgByRate('$2','220','auto')."' alt='爱丁堡艺术专科学校' />",$str);
$str = preg_replace('/<img(.*)src=["\']([^>]+)["\'](.*)\/?>/misU',"<img src='$2' width='210' alt='爱丁堡艺术专科学校' />",$str);
var_dump($str);exit;
?>
preg_replace.php
<?php
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
$new = " aaaaa "; // /^ $/结束
$new = preg_replace('/^\s+/', '', $new);
?>
preg_replace2.php
<?php
//preg_replace 第 一个参数是正 则 ,第二个是被替换后的字符串,第三个是 ,原来的字符串
// \${0}表示整个 \{1} 表示第一个被匹配的括号内的内容 \{2} 表示第二个被匹配的括号内的内容
$value['view'] = preg_replace("#(<a href=.*>点击查看</a>)#iUs","<div>\${0}</div>",$value['view']);
//把 含 有 <a href=.*>点击查看</a> 的外面加上 <div></div>的标签
//i (忽略大小写)
$aaa = "<a href=\"/plus/list.php?tid=103\">补丁下载(最新)</a>";
$aaa= preg_replace("#(<a href=.*>)(.*)(</a>)#iUs","\${1}下载专区\${3}",$aaa);
var_dump($aaa);
//就得到 <a href="/plus/list.php?tid=103">下载专区</a>
$bbb = "<a href='/plus/list.php?tid=103'>补丁下载(最新)</a>";
$bbb= preg_replace("#(<a href=.*>)(.*)(</a>)#iUs","\${1}下载专区\${3}",$bbb);
var_dump($bbb);
//就得到 <a href="/plus/list.php?tid=103">下载专区</a>
preg_replace3.php
<?php
$str = "<div class='tatapage'>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=1'>首页</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=1'>上一页</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=1'>1</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=3'>下一页</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=6'>末页</a></span> </div>";
//$str = preg_replace('#<span>(.*)末页(.*)</span>#iUs', "<span class='endpage'>\${1}末页\${2}</span>", $str);
//$str = preg_replace('#(<a href=.*>末页</a></span>)#iUs', "AAAAAAA", $str);
$str = preg_replace("/^\<a href='(.*)'>下一页\<\/a>$/iUs","VVVVVV",$str);
var_dump($str);
preg_replace4.php
<?php
$str = "<div class='tatapage'>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=1'>首页</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=1'>上一页</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=1'>1</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=3'>下一页</a></span>
<span><a href='list.php?tid=63&TotalResult=12&PageNo=6'>末页</a></span>
</div>";
//$str = preg_replace('#<span>(.*)末页(.*)</span>#iUs', "<span class='endpage'>\${1}末页\${2}</span>", $str);
//$str = preg_replace('#(<a href=.*>末页</a></span>)#iUs', "AAAAAAA", $str);
$str = preg_replace("/(<a href=.*?>下一页<\/a>)/iUs","VVVVVV",$str);
var_dump($str);
$str = "aa<img rrrrrrr >sdfsdfsdf<img src='ddd' >";
preg_match("/<(img.*?)>/si",$str,$arr);
//preg_match_all($pattern, $subject, $matches)
var_dump($arr);
$str = "aa<img rrrrrrr >sdfsdfsdf<img src='ddd' >";
preg_match("/<img.*?>/si",$str,$arr);
var_dump($arr);
<?php
//移除上一页 下一页标签
$xiamian = preg_replace("#<a href=\"(.*)\">上一页</a>#iUs","",$xiamian);
$xiamian = preg_replace("#<a href=\"([\/a-zA-Z0-9-_]*)\">下一页</a>#iUs","",$xiamian);
正确答案
?的一个用法匹配0次或1次。 但是?还有第二个含义,作为正则的懒惰模式。 正则有两种模式: 一种为贪婪模式(默认)。 另外一种为懒惰模式。 以下为例:(abc)dfe(gh) 对上面这个字符串使用(.*)将会匹配整个字符串,因为正则默认是尽可能多的匹配。虽然(abc)满足我们的表达式,但是(abc)dfe(gh)也同样满足,所以正则会匹配多的那个。 如果我们只想匹配(abc)和(gh)就需要用到以下的表达式(.*?)在重复元字符*或者+后面跟一个?,作用就是在满足的条件下尽可能少匹配。
是不是 *?) 尽可能的少的匹配) 例如 xxx)))) 只匹配xxx)
比如说:<div class="desc">。。。。。。</div> 我要取标签中间的内容,我的正则是:<div class=\"desc\">(.*?)<\/div> 为什么不可以啊。。。
正确答案
. 匹配除 "\n" 之外的任何单个字符 * 匹配前面的子表达式零次或多次 ? 非贪婪匹配 象你上面的那样写的话,<div>和</div>之间不能有换行 若是有换行也要的话还加上一个换行,改成 <div class=\"desc\">([.\n]*?)<\/div>
提问者评价
谢谢亲爱的们帮忙~~ 中间有换行~~