首页 > 编程技术 > php

PHP 替换字符串中img标签样式 preg_match_all str_replace

发布时间:2016-11-25 17:42

我们要获取字符串中图片地址需要使用preg_match_all正则表达式来获取,替换获取到的内容使用str_replace函数即可了,下面我们看个实例。

 代码如下 复制代码

function repalceTA($str){
    preg_match_all("/<img(.*)(src="[^"]+")[^>]+>/isU", $str, $arr);
    for($i=0,$j=count($arr[0]); $i<$j; $i++){
        $str = str_replace($arr[0][$i],"<img " .$arr[2][$i]." />",$str);
    }
    return $str;
}

php中preg_match_all函数

preg_match_all — 执行一个全局正则表达式匹配

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中.

在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索.


php中str_replace函数

定义和用法

str_replace() 函数使用一个字符串替换字符串中的另一些字符。

语法

str_replace(find,replace,string,count)

个人觉得邮箱正则表达式在javascript与php中一样的规则了,只是语法稍有不同,下面我就把在服务器与客户端邮箱验证代码给大家看看。

邮箱地址验证有很多方法。在浏览器端,js邮箱验证可以通过正则表达式检测。

 代码如下 复制代码

function isEmail(email) {
    return /^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(\([x01-x09x0bx0cx0d-x7f]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])))$/i.test(email);
}

function validateEmail(elementValue)
{   
var emailPattern = /^[a-zA-Z0-9._]+[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;   
return emailPattern.test(elementValue);
}

function checkEmail(mail) {   
return /^[w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[a-z]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?$/.test(mail);
}

调用很简单:

 代码如下 复制代码

 
if (isEmail('youremail@yourdomain.com')){ console.log(' www.111cn.net This is email is valid'); }View Code 


如果是进行服务器端验证。像php,则最简单的莫过于:
 

 代码如下 复制代码

$a='/([w._]{2,10})@(w{1,}).([a-z]{2,4})/';
$b='1412424545645454545454545k@qq.com';

if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
}


你要判断一整段字符串是否都匹配就要用断言。如^ $
/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/
注意头和尾加上了^ $

利用正则去除空格我们可以直接使用preg_replace即可解决了,但是如果要包括回车换行之类的只是写法不一样,下面我给大家整理两个实例。

php正则如何删除空行。

 

 代码如下 复制代码

$newhtml=preg_replace("/(r?n)\1+/","\1",$newhtml);

echo preg_replace('/($s*$)|(^s*^)/m', '', $str); 完美解决:victory:

$a = 'gdgdga


gagda
faf


fefe

fefe';

echo preg_replace('/(r?n)\1+/',"nn",$a);


php清除 回车换行

 

 代码如下 复制代码
<?php  
         //php 不同系统的换行 
        //不同系统之间换行的实现是不一样的 
        //linux 与unix中用 /n 
        //MAC 用 /r 
        //window 为了体现与linux不同 则是 /r/n 
        //所以在不同平台上 实现方法就不一样 
        //php 有三种方法来解决 
             
        //1、使用str_replace 来替换换行 
        $str = str_replace(array("/r/n", "/r", "/n"), "", $str);  
             
        //2、使用正则替换 
        $str = preg_replace('//s*/', '', $str); 
             
        //3、使用php定义好的变量 (建议使用) 
        $str = str_replace(PHP_EOL, '', $str);  
?>

php替换清除换行符,清除回车换行,去除换行函数,空格,html标签的函数

 代码如下 复制代码

function DeleteHtml($str)
{
$str = str_replace("<br/>","",$str);
$str = str_replace("\t","",$str);
$str = str_replace("\r\n","",$str);
$str = str_replace("\r","",$str);
$str = str_replace("\n","",$str);
return trim($str);
}

isU是大小写分的意思,这里s还有则不包括换行符而U是反转了匹配数量的值使其不是默认的重复,大概就是这样了个体我们看文章。

正则后面的/(.*)/isU  ,“isU”参数代表什么意思?
这是正则中的修正符.
i是同时查找大小写字母,
s是圆点(.)匹配所有字符,包括换行符.如果没有设定s,则不包括换行符.
U是反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复

preg_match 兼容的正则表达式语法中 b 代表单词边界
所以:下面应该是可以???

 代码如下 复制代码

$a="test,admin,abc";

$b="te";

$exist=preg_match("/b{$b}b/",$a);

if($exist)

{

echo "存在";

}else

{
echo "不存在";
}


看一下相关说明

int preg_match ( string pattern, string subject [, array matches [, int flags]] );
preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 false。
示例:

 代码如下 复制代码

<?php

$a = "abcdefgabcdefaaag";

preg_match('|abc([a-z]+)g|isu',$a,$out1);

preg_match_all('|abc([s]+)g|isu',$a,$out2);

echo "<pre>";

print_r($out1);

 

print_r($out2);

echo "</pre>";

?>

写法:
使用双引号时和单引号的不同

 代码如下 复制代码

<?php

preg_match_all("/href="(.*)"/isu",$contents,$out);

preg_match_all('|href="(.*)"|isu',$contents,$out);

?>

有一个项目要获取页面中所有img标签中的图片地址,这里我们使用到了preg_match_all正则函数,然后看我下面的一些参数即可实现了。

 代码如下 复制代码

<?php

 
$ext = 'jpg|jpeg|gif|bmp|png';//罗列图片后缀从而实现多扩展名匹配
$str = '<p><img title="湛蓝天空" alt="湛蓝天空" onload="ResizeImage(this,860)"" width=100% src="http://你的域名/uploads/allimg/131121/1-1311210925190-L.jpg" /></p><p><img title="湛蓝天空" alt="湛蓝天空" onload="ResizeImage(this,860)"" width=100% src="http://你的域名/uploads/allimg/130814/1-130Q42211190-L.jpg" /></p><p><img title="湛蓝天空" alt="湛蓝天空" onload="ResizeImage(this,860)"" width=100% src="http://你的域名/uploads/allimg/130923/1-130923233I30-L.jpg" /></p>';
 
 
$img_list = array(); //这里存放结果map
$img_list = img_match($str,$ext);
print_r($img_list); //查看结果变量
 
/*
* $str,要进行处理的内容
* $ext,要匹配的扩展名
*/
 
function img_match($str,$ext){
 
$list = array(); //这里存放结果map
$c1 = preg_match_all('/<imgs.*?>/', $str, $m1); //先取出所有img标签文本
for($i=0; $i<$c1; $i++) {    //对所有的img标签进行取属性
$c2 = preg_match_all('/(w+)s*=s*(?:(?:(["'])(.*?)(?=2))|([^/s]*))/', $m1[0][$i], $m2); //匹配出所有的属性
for($j=0; $j<$c2; $j++) { //将匹配完的结果进行结构重组
$list[$i][$m2[1][$j]] = !empty($m2[4][$j]) ? $m2[4][$j] : $m2[3][$j];
}
}
 
return $list;
}
 
?>

效果如下

PHP正则匹配img及标签各属性值(匹配图片函数)

再扯蛋一下,还是正则取指定字符中的内容

 代码如下 复制代码

$str = preg_match_all('/(original-title=).*?(>)/is', $str,$array);

很简单吧。

标签:[!--infotagslink--]

您可能感兴趣的文章: