㈠ php 正则表达式 提取指定超链接中的url
preg_match_all('/<a[^>喊卖]+href="([^"]+)"[^>]+class="green"
[^>郑中逗培备]+/Ui', $str, $arr);
print_r($arr[1]);
㈡ 哪位大神能帮我读一下这段正则表达式,php中的,我知道是关于url解析的,后面是解析控制器,只是落
我不会php,但也可以为您解答。
前面你应缺亮郑该懂了,就是原字匹配,
我猜括号的地方才是你看不懂的。
在正则表达式里,括号匹配到的内容可以存入分组内,
比如有一段正则
qq:(d+)nick:([a-zA-Z]+)
用来匹配文本
qq:1014359461nick:Wizard
匹配完后,
第一个括号的表达式‘(d+)’匹配到的内容‘1014359461’会存入分组1里,
第二个括号的表达式‘([a-zA-Z]+)’匹配到的内容‘Wizard’会存入分组2里键源,
如果再有括号,就继续存入分组3、分组4...
不过这样会有上限,也不是很清晰
所以,可以使用另一种方法,看如下正则
qq:(?<qq>d+)nick:(?<nick>[a-zA-Z]+)
还是匹配刚才那段文本,匹配成功后,
不再有刚才的分组1和分组2,取而代之的是 名为‘qq’和‘nick’这两个分组,后面我简称它们为 $qq、$nick
存入 $qq 的内容依然是之前 分组1 里的 ‘1014359461’
存入 $nick 的内容依然是之前 分组2 里的 ‘Wizard’
再谈谈括号内的‘|’符号,如下正则
(css|js|flash)
它含义是,此处位置能匹配的只有
‘css’或者‘js’,或者‘flash’,否则匹配不成功
匹配成功后会存入 一个分组内
如你发的图里的
(?<controller>(css|js|flash))
这部分含义如前一条所说那样,只不过会把匹配到的值存入 $controller 分组内
接下来,讲‘[...]’
[123abc]
这个正则表示只匹配‘123abc’里的其中一个字符,
如果有用‘-’且不在第一位则有特殊含义(第一位是普通符号),如下
[1-3a-c]
这个正则就和上一条正则功能是一样的,表示允许匹配中括号里的一个字符,范围是从 1到3,或者 a到c
你的代码里
[a-zA-Z0-9/]
表示匹配一个字符,该字符的范围是 a-z(小写字母),或者A-Z(大写字母),或者0-9(一位数字),或者后面那个‘/’字符
而后面加个+符号
[a-zA-Z0-9/]+
则是此处正则必须匹配一个 字母或数字 或者多个,并尽量匹配多个
那么你代码里的
(?<name>[a-zA-Z0-9/]+)
就是将前前一条正则匹配到的内容存入 $name 分组中去
我不懂PHP,但知道这里的 ‘/(’ 是转义字符,这个是php语法里的东西,你要注意这一点
还有前面提到那么多次“分组“这个词,那这些分组怎么获取呢,这个是php语言里的东西,你可以去查一下
另,据我所值‘(?<name>...)’这伏颂样的语法也可以这么写‘(?'name'...)’,不知道这个能在php里通过不。
至此,你的疑惑应该解开了吧,很用心写的,请采纳哈,谢谢~
㈢ php正则表达式 正则匹配网址是否带http:// https://
$str = "https://xxxxxxxxx";
if(preg_match("/^(http:\/\/|https:\/\/).*$/",$str)){
echo "yes";
}
亲测是可以的,你可以自己拿去试一试
㈣ php 正则表达式怎么把图片URL匹配出来呢
使用preg_match_all函数,即可实现你的要求。代码如下:
$str='<imgdatasrc="http://mm..com/mmbiz/2ItUdTx3iamOFK8QVqofnQ/640?tp=webp"data-s="300,640"data-ratio="0.625"data-w="400"style="box-sizing:border-box!important;width:auto!important;word-wrap:break-word!important;visibility:visible!important;"/>';
$pattern='/<img.*src="(.*?)"/';
preg_match_all($pattern,$str,$matches);
echo$matches[1][0];
//返回:http://mm..com/mmbiz/2ItUdTx3iamOFK8QVqofnQ/640?tp=webp
㈤ PHP-php中如何使用正则表达式匹配URL中的域名
<?php
//从URL中取得主机名
preg_match("/^(http://)?([^/]+)/i",山兄判"IP/index.html"尘宴,$matches);
$host=$matches[2];
//从逗改主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/",$host,$matches);
echo"domainnameis:{$matches[0]} ";
?>
㈥ PHP判断变量是否为正确的url的正则表达式怎么写
if (!preg_match('/http:\/\拿培/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is',$变量)){
echo '凯敏悄盯渣网页错误';
}把$变量替换成你的变量就可以了
㈦ php正则表达式[quote][size=2][url=。。...[/quote]怎么匹配
$string = '[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=848579&ptid=6666][color=#999999]撒旦法撒旦法发表于 2014-11-10 23:06[/color][/url][/size]
ask江东父老卡双贺卜打冠军啊圣诞节阿莱克斯禅中穗的结果...[/quote]';
$st = '/\[quote\][\s\S]*\培培[\/quote\]/';
preg_replace( $st, '', $string );
㈧ 在php中怎样用正则表达式从一个字符串中提取url地址
1楼纳什从源码中找超链接。
楼主说从字符串中找url,这个真的是不好实现。开头可以凭"http://或者https://",但是结尾就不好说了,如果只针对首页那就没有文件名,地址里有可能以汉字结尾,及时有指定文件名,万一有get值是汉字呢?并且还是结尾。。
关键就是结尾。。
“http://.com/空间” (这个成立。。我的空间就是汉字地址。)
“http://.com/page.php?id=1&ac=网络” (这个成立,有些小网站传递一个标题之类的)
还有get值可以是空的,万一“=”后面是我们其他内容而不属于url,而且还是英文???
“http://.com/page.php?id=1&ac=url url” (这个也成立,不能以空格过滤呀。。)
这个问题的答案我也等。。
提交了才发现,网络都不能实现这一点,答案难寻呀。。呵呵
㈨ php如何使用正则表达式匹配url图片啊
$image='<imgsrc="/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)"来匹配多个类型,"|"是或者的意思。
㈩ php如何使用正则表达式匹配url图片啊
//抓取网页
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]." ";
}
}
}