㈠ 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]." ";
}
}
}