① php简单正则匹配Img标签src内容采集
//抓取网页
echo" 抓取网页======================================= ";
functiongetHTTPS($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_REFERER,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$result=curl_exec($ch);
curl_close($ch);
return$result;
}
$result=getHTTPS("");
$array=array(
'img',
'script',
'link'
);
$num=count($array);
for($i=0;$i<$num;++$i){
echo$array[$i]."-------------------------------- ";
if(preg_match_all("/<".$array[$i]."[^>]*>/i",$result,$m)){
for($j=0;$j<count($m[0]);$j++){
echo$m[0][$j]." ";
}
}
}
② PHP正则表达式提取IMG标签的问题
$preg = "/<img src=\"(.+?)\".*?>/";
③ 请问怎样用php 正则表达式取设置宽和高的[img][/img]标签里面的图片地址
用php给你运行了一个
$txt='[img=442,296]图片地址1[/img]
[img=300,188]图片地址2[/img]
[img=120,206]图片地址3[/img]';
$re='/[img=(d+,d+)](S+?)[/img]/';//这里修改下,加上一个?防止以单行文本导致的定界符不准问题
$arr=[];
preg_match_all($re,$txt,$arr);
var_mp($arr);
运行结果如下
phptest.php
array(3){
[0]=>
array(3){
[0]=>
string(32)"[img=442,296]图片地址1[/img]"
[1]=>
string(32)"[img=300,188]图片地址2[/img]"
[2]=>
string(32)"[img=120,206]图片地址3[/img]"
}
[1]=>
array(3){
[0]=>
string(7)"442,296"
[1]=>
string(7)"300,188"
[2]=>
string(7)"120,206"
}
[2]=>
array(3){
[0]=>
string(13)"图片地址1"
[1]=>
string(13)"图片地址2"
[2]=>
string(13)"图片地址3"
}
}
//增加一个矩阵转换
$txt='[img=442,296]图片地址1[/img][img=300,188]图片地址2[/img][img=120,206]图片地址3[/img][img=120,206]wwww[/img]';
$re='/[img=(d+,d+)](S+?)[/img]/';
var_mp(preg_match_all_to_array($re,$txt));
functionpreg_match_all_to_array($re,$txt)
{
$arrs=[];
preg_match_all($re,$txt,$arrs);
if($arrs===false)
return$arrs;
//移除到总匹配数据
array_shift($arrs);
$return=[];
//获取矩阵纵长
$arrs_longitudinal=count($arrs);
for($i=0;$i<$arrs_longitudinal;$i++){
//获取单列横长
$arrs_transverse=count($arrs[$i]);
for($j=0;$j<$arrs_transverse;$j++){
$return[$j][$i]=$arrs[$i][$j];
unset($arrs[$i][$j]);
}
unset($arrs[$i]);
}
return$return;
}
④ php正则表达式[img=**]
按照你的要求编写的php程序如下(见图,正则匹配结果取第一和第二捕获组的数据)
⑤ php 正则表达式取[img][/img]标签里面的东西
<?php
$string = '[img]http://www..com/img/bdlogo.gif[/img]网络网络[img]http://127.0.0.1/jx09/p_w_upload/Mon_1308/196_403966_392c1785279171a.png[/img]<p>sssss</p>';
preg_match_all("|[img](.*)[/img]|iUs",$string,$arr);
foreach($arr[0] as $v){
echo $v.'<br>';
}
⑥ 求教php正则高手。php正则获取html内容中的所有img路径及名称,替换img的路径
正则表达式:(?<=<img src=")(/.+/)(.+?.(gif|jpg|png))(?=">)
分别取第0和第2捕获组的数据,就是你要的获取/abc/efg/qwe/1.gif和获取1.gif的数据
替换你可以用上面的正则表达式:(?<=<img src=")(/.+/)(.+?.(gif|jpg|png))(?=">)
替换成:style/images/$2
我给你一个用java实现的上述正则表达式的例子.
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassCC{
publicstaticvoidmain(String[]args){
Strings="<imgsrc="/abc/efg/qwe/1.gif">";
Stringregex="(?<=<imgsrc=")(/.+/)(.+?\.(gif|jpg|png))(?=">)";
Patternp=Pattern.compile(regex);
Matcherm=p.matcher(s);
while(m.find()){
System.out.println(m.group());
System.out.println(m.group(2));
}
System.out.println(s.replaceAll("(?<=<imgsrc=")(/.+/)(.+?\.(gif|jpg|png))(?=">)","style/images/$2"));
}
}
运行结果:
/abc/efg/qwe/1.gif
1.gif
<img src="style/images/1.gif">
⑦ php 正则判断img标签
$content='<imgsrc="1.jpg"alt="">我是文字<imgsrc="2.jpg"alt="">';
if(preg_match_all("/<img[^>]*src[="'s]+([^"']*)["']?[^>]*>((?:(?!<img)[sS])*)/i",$content,$m)){
for($j=1;$j<count($m);$j++){
for($i=0;$i<count($m[$j]);$i++){
echo$m[$j][$i]." ";
}
}
}