请问怎样用php 正则表达式取设置宽和高的[img][/img]标签里面的图片地址
宽度和高度不固定,例如:[img=442,296]图片地址1[/img][img=300,188]图片地址2[/img][img=120,206]图片地址3[/img]...
宽度和高度不固定,例如:
[img=442,296]图片地址1[/img]
[img=300,188]图片地址2[/img]
[img=120,206]图片地址3[/img] 展开
[img=442,296]图片地址1[/img]
[img=300,188]图片地址2[/img]
[img=120,206]图片地址3[/img] 展开
2个回答
展开全部
用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_dump($arr);
运行结果如下
php test.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_dump(preg_match_all_to_array($re,$txt));
function preg_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;
}
追问
大神,这种的可以实现,请问下设置宽高的和没设置的混合[img=442,296]图片地址1[/img]和[img]图片地址2[/img],能提取吗?谢谢
追答
正则一般都是目的性很明确的去获取某一段,如果你需要这样混合形式的提取可以先做切割再做尝试匹配.
例如先执行$re='/\[img\=(\d+,\d+)\](\S+)\[\/img\]/';去匹配,如果匹配不到就执行$re='/\[img\](\S+)\[\/img\]/';匹配,如果还匹配不到就说行都不符合.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询