php 正则表达式 url匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 正则表达式 url匹配相关的知识,希望对你有一定的参考价值。
匹配url的文件扩展名
如:
http://www.sina.com.cn/abc/de/fg.php
http://www.sina.com.cn/abc/de/fg.php?float=0.5
http://www.sina.com.cn/abc/de/fg.html?float=0.5
http://www.sina.com.cn/abc/de/fg.fg.php?float=0.5
要求用正则或者php函数匹配出以上的php或者html这样的扩展名
1,preg_grep(pattern,array);它的返回值是一个新数组,新数组的元素是成功匹配的元素。
2,preg_match(mode,string);它的返回值是一个整数,0或1,0表示匹配不成功,1表示匹配成功,preg_match()将在第一个匹配成功后停止搜索,不再继续匹配。
3,preg_match_all(模式,字符串,保存匹配结果数组(multidimensional array));在搜索字符串中,所有匹配的模式都提供正则表达式的匹配结果,并以指定的顺序将它们输出到指定的数组。它执行与字符串末尾匹配的全局正则表达式匹配。
4,preg_quote(string);转义正则表达式字符,preg_quote()需要一个参数字符串,并在每个正则表达式语法中为该字符添加反斜杠。
5,转换效果如图所示。
参考技术A1、 preg_grep(模式,数组);它的返回值是一个新数组,新数组的元素是匹配成功的元素。
2、preg_match(模式,字符串);它的返回值是一个整型,0或者1, 0表示匹配不成功,1表示匹配成功,preg_match()第一次匹配成功后将会停止搜索,不再继续往下匹配。
3、preg_match_all(模式,字符串,保存匹配结果的数组(多维数组));搜索字符串中,所有匹配模式给定正则表达式的匹配结果,并且将它们以指定的顺序输出到指定的数组中。它执行一个全局正则表达式匹配,一直匹配到字符串的末尾。
4、preg_quote(字符串);转义正则表达式字符, preg_quote() 需要参数字符串,并向其中每个正则表达式语法中的字符前增加一个反斜线。
5、转换效果如图所示。
参考技术B不需要正则,以下代码就能实现:
<?php$str = 'http://www.sina.com.cn/abc/de/fg.fg.php?float=0.5';
if(strpos($str, '?') !== false)
$str = substr($str, 0, strpos($str, '?'));
$last_pos = strrpos($str, '.') + 1; // .号最后出现的位置
echo substr($str, $last_pos);
else
$last_pos = strrpos($str, '.') + 1; // .号最后出现的位置
echo substr($str, $last_pos);
参考技术C \ /主。 *程序Info3 = \ D 参考技术D <?
$url="http://www.sina.com.cn/abc/de/fg.fg.php?float=0.5";
preg_match('/http:\/\/[0-9a-z\.\/\-]+\/[0-9a-z\.\/\-]+\.([0-9a-z\.\/\-]+)/',$url,$arr);
echo $arr[1];
?>本回答被提问者采纳
php如何使用正则表达式匹配url图片啊
格式为
http:xxxxxxxxxxxxxxxxxxxxxxxxx.jpg
谢谢啦
可以这样:
$image = "http://xxxxxxxxx.jpg"preg_match("/(http:\\/\\/)?\\w+\\.jpg/",$image,$matches);//http://可要可不要
echo $matches[0];//$matches[0]即为匹配的图片路径
以上只是匹配jpg类型的图片
如果要匹配其他类型可以这样使用
preg_match("/(http:\\/\\/)?\\w+\\.(jpg|jpeg|gif|png)/",$image,$matches);echo $matches[0]; 参考技术A $image = '<img src="/avatar/100/r6s1g11.jpg" />';
preg_match('/src="(.*?(jpg|jpeg|gif|png))/', $image, $url);
echo $url[1];
网页上的图片都是使用IMG标签加载的,所以在匹配的时候是以 src=" 开始匹配,很多人会觉得为什么不是以 http:// 开始匹配,那是因为图片地址会有相对地址(如:"/xxx/xxx.jpg")和绝对地址(如:"http://www.xxx.com/xxx/xxx.jpg")两种情况,相对地址是没有 http:// 的,所以为了这两种情况都能匹配,故以 src=" 是最好的。
".*" 是匹配多个字符的意思,?号的意思是只匹配到第一个出现的jpg或jpeg、gif、png。
因为图片有很多格式类型,所以用"(jpg|jpeg|gif|png)"来匹配多个类型,"|"是或者的意思。
参考技术B $a = '<img alt="PHPimg" src="https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/reon/abpic/item/c1eb922389152670ac34de5d.jpg">';preg_match("/http\\:([^\\"\\']+)\\.jpg/i", $a, $m);
print_r($m);追问
http://hiphotos.baidu.com/reon/abpic/item/c1eb922389152670ac34de5d.jpg;dsfsdf;http://hiphotos.baidu.com/reon/abpic/item/c1eb922389152670ac34de5d.jpg
不对啊,上面只有一条记录啊,要俩条才对的,前后覆盖了
如果是多条,用preg_match_all
以上是关于php 正则表达式 url匹配的主要内容,如果未能解决你的问题,请参考以下文章