首頁 > 後端開發 > php教程 > 一个正则表达式的写法,该如何解决

一个正则表达式的写法,该如何解决

WBOY
發布: 2016-06-13 13:48:23
原創
913 人瀏覽過

一个正则表达式的写法
$str='[movie=http://a.com/a.X]'; //X格式为除了.mp3和.wmv以外的任何字符串
$ptn="/\[movie\=.*\.[^(mp3|wmv)]\]/i";
$str=preg_replace($ptn,'x',$str);
echo $str;
怎么不对啊

------解决方案--------------------
你没有理解正则里中括号[]的含义,[]里所有的东西匹配的时候只“消耗”单个字符。
除xxx之外的需求一般用“否定前瞻”(negative lookahead) 来实现。
------解决方案--------------------
$str='[movie=http://a.com/a.mp3]';
$ptn="/\[movie\=.*\.[^(mp3|wmv)]+\]/i"; 

if(preg_match($ptn,$str)) {
echo 'Y';
} else {
echo 'N';
}
------解决方案--------------------

PHP code
<?php $str='[movie=http://a.com/a.mp3]';           //X格式为除了.mp3和.wmv以外的任何字符串
$ptn="/\[movie\=.*(?<!mp3|wmv)]$/";
$str=preg_replace($ptn,'x',$str);
echo   $str; 
?>
<br><font color="#e78608">------解决方案--------------------</font><br>
登入後複製
PHP code
<?php $str='[movie=http://a.com/a.mp3]';
//$str='[movie=http://a.com/a.mp]';
$ptn="/\[movie\=(?>.*\.)(?:(?!mp3|wmv).+)\]/";

if(preg_match($ptn,$str,$g))   {
 echo   'Y';
 print_r($g);
}   else   {
 echo   'N';
}
?> <div class="clear">
                 
              
              
        
            </div>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板