欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php preg_replace 特殊符号 加号点号星号问号 misU 有大用 有大大用

shiping1 的头像

//修饰符
  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"...

php 正则表达式中的 .*? 表示什么意思?

我知道 .* 是任意字符 但是又加了一个? 这个表示什么意思啊
是非贪婪模式

.*会匹配后面的一切字符,就是到结束的意思
加?后就是不贪婪模式,这时要看?后边的字符是什么了,如.*?"的意思是遇到双引号则匹配结束
. 匹配除 "\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&amp;TotalResult=12&amp;PageNo=1'>首页</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;PageNo=1'>上一页</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;PageNo=1'>1</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;PageNo=3'>下一页</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;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&amp;TotalResult=12&amp;PageNo=1'>首页</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;PageNo=1'>上一页</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;PageNo=1'>1</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;PageNo=3'>下一页</a></span>
<span><a href='list.php?tid=63&amp;TotalResult=12&amp;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);



php正则表达式 .*? 组合什么意思?

2013-12-19 19:58西瓜下的树荫 | 浏览 513 次
 
正确答案
?的一个用法匹配0次或1次。 但是?还有第二个含义,作为正则的懒惰模式。 正则有两种模式: 一种为贪婪模式(默认)。 另外一种为懒惰模式。 以下为例:(abc)dfe(gh) 对上面这个字符串使用(.*)将会匹配整个字符串,因为正则默认是尽可能多的匹配。虽然(abc)满足我们的表达式,但是(abc)dfe(gh)也同样满足,所以正则会匹配多的那个。 如果我们只想匹配(abc)和(gh)就需要用到以下的表达式(.*?)在重复元字符*或者+后面跟一个?,作用就是在满足的条件下尽可能少匹配。
是不是 *?) 尽可能的少的匹配) 例如 xxx)))) 只匹配xxx)

来自 http://zhidao.baidu.com/question/1238104747929753299.html



php脚本中 正则( .*?)用在什么地方

2011-11-17 10:59xingnazong | 浏览 469 次
比如说:<div class="desc">。。。。。。</div>
我要取标签中间的内容,我的正则是:<div class=\"desc\">(.*?)<\/div>
为什么不可以啊。。。
2011-11-17 11:09
正确答案
.  匹配除 "\n" 之外的任何单个字符
*  匹配前面的子表达式零次或多次
? 非贪婪匹配

象你上面的那样写的话,<div>和</div>之间不能有换行
若是有换行也要的话还加上一个换行,改成 <div class=\"desc\">([.\n]*?)<\/div>
  • 提问者评价

  • 谢谢亲爱的们帮忙~~  中间有换行~~
评论 | 1 0
 
按默认排序 | 按时间排序

其他3条回答

2011-11-17 14:45L☆√ē | 七级
标志位中使用s开启“单行模式”后,点号“.”可以匹配新行符 "\n".
使用*?会使正则表达式在'.'每次匹配成功过后尝试用(.*?)后面的‘<’匹配文本的下一个字符,如果不成功会用'.'继续匹配直到‘<'可以匹配成功,在已经知道要匹配的字符串后面有'<'的情况下可以用取反[^<]匹配任何非'<'的字符。
所以最好这样写<div class=\"desc\">([^<]*)<\/div>
至于“为什么不可以啊。。。”,你的写法应该是可以的(如果没有像xylanh说的有换行的话),因为不知道你要匹配的具体字符串,和你的php代码,和具体报错所以没办法知道。
评论 | 0 0
2011-11-17 11:23rockmant | 八级
<div class=\"desc\">(.*?)<\/div> 就可以了
. 是任何东西
* 是0至无限
? 是0至1
评论 | 0 0
2011-11-17 12:45xiongjin198710 | 一级
应该可以啊,这个(.*?)就是防止贪婪匹配的,


来自 http://zhidao.baidu.com/question/343706140.html


  

普通分类: