我如何可以提取https://domain.com/gamer?hid=.115f12756a8641
從下面的字符串,即從網址獲取正則表達式
rrth:'http://www.google.co',cctp:'323',url:'https://domain.com/gamer?hid=.115f12756a8641',rrth:'https://another.com'
PS:我是新來的正則表達式,我學習。但上面的字符串似乎被格式化因此,某種捷徑必須在那裏。
我如何可以提取https://domain.com/gamer?hid=.115f12756a8641
從下面的字符串,即從網址獲取正則表達式
rrth:'http://www.google.co',cctp:'323',url:'https://domain.com/gamer?hid=.115f12756a8641',rrth:'https://another.com'
PS:我是新來的正則表達式,我學習。但上面的字符串似乎被格式化因此,某種捷徑必須在那裏。
如果你輸入的字符串被稱爲$str
:
preg_match('/url:\'(.*?)\'/', $str, $matches);
$url = $matches[1];
(.*?)
url:'
和'
之間捕捉一切,以後可以用$matches[1]
檢索。
?
特別重要。它使重複不合格,否則它會消耗一切,直到最後的'
。
如果您的實際輸入字符串包含多個url:'...'
部分,請改爲使用preg_match_all
。然後$matches[1]
將是所有需要值的數組。
簡單的正則表達式:
preg_match('/url\s*\:\s*\'([^\']+)/i',$theString,$match);
echo $match[1];//should be the url
它是如何工作的:
/url\s*\:\s*
:匹配url
+任意數量的空格] + :
(冒號)+ [任意數量的空格]
但我們不」 t需要這個,那就是第二部分來的地方
\'([^\']+)/i
:匹配'
,然後括號(()
)創建一個組,那將存儲s單獨在$matches
陣列中。將匹配的是[^']+
:除撇號外的任何字符([]
創建字符類,^
表示:排除這些字符)。所以這個類將匹配任何字符,直到它到達結束/定界撇號。
/i
:如果字符串可能包含URL:'http://www.foo.bar'
,我添加了i
,這是不區分大小寫的標誌。
就是這樣。
Perhaps you could sniff around here,以獲得更好的理解正則表達式的
注意:我不得不逃脫單引號,因爲該模式字符串使用單引號作爲分隔符:"/url\s*\:\s*'([^']+)/i"
作品一樣好。如果你不知道天氣或不是你會處理單或雙引號,你可以用另一個字符類取代報價:
preg_match('/url\s*\:\s*[\'"]([^\'"]+)/i',$string,$match);
顯然,在這種情況下,你必須逃脫你用於模式字符串的分隔符...
不知道你從哪裏得到它,但可能有更好的方法從這個比正則表達式提取數據。例如,該字符串看起來非常接近JSON。如果您可以稍微重新格式化,可以使用'json_decode()'將所有數據轉換爲格式良好的數組。 – SDC