我的文字是:PHP預浸匹配解析的東西,可能是YouTube網址
u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig
我想分析u0026url 我的PHP代碼:
preg_match('/u0026itag=22\u0026url=(.*?)/', $part, $A);
echo $A[1];
但它不給我結果
我的文字是:PHP預浸匹配解析的東西,可能是YouTube網址
u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig
我想分析u0026url 我的PHP代碼:
preg_match('/u0026itag=22\u0026url=(.*?)/', $part, $A);
echo $A[1];
但它不給我結果
您是否嘗試過使用貪婪匹配http://regex101.com/r/lT1wK5?請記住逃脫帶有\ U還,否則你會得到
編譯失敗:PCRE不支持\ L,\ L,\ N {}名稱,\ U,或帶有\ U
例如:
$var = "u0026itag=22\u0026url=http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig";
preg_match('/u0026itag=22\\\u0026url=(.*)/', $var, $A);
echo $A[1];
首先一個提示:如果您enable errors, PHP tells you about what is going wrong。當我第一次複製你的代碼時,我收到了以下警告:
警告:preg_match():編譯失敗:PCRE不支持\ L,\ l,\ N {name},\ U或\你在偏移量14
所以這已經是一個暗示,你逐字地放在那裏的一些序列被解析爲正則表達式,因此它需要轉義或引用。我首選這裏引用,即在\ Q開頭和。\ E末(報價)包裝:
$result = preg_match('/^\Qu0026itag=22\u0026url=\E(.*?)/', $subject, $matches);
## ##
然後阻止看到一個錯誤,並轉向$result
爲1,這意味着它的工作。但是你還沒有看到任何組比賽1或更好的說你看到一個空的匹配:
[0] => string(22) "u0026itag=22\u0026url="
[1] => string(0) ""
那是因爲你與明星變成了重複從貪婪到懶惰。讓我們把它取而代之:
/^\Qu0026itag=22\u0026url=\E(.*+)/
# plus means posessive
[1] => string(52) "http%3A%2F%2Fr5---sn-q4f7dnel.c.youtube.com\u0026sig"
好吧,這看起來更好,它包含「網址」。這使我想到了一點:即使我向你解釋了一些正則表達式(希望這給出了一些指針),但它實際上可能並不是首先使用的正確工具。
你在這裏看起來像一些JSON字符串,確實包含一些URL編碼的東西。
因此,我建議您首先使用json_decode
解碼JSON字符串,然後使用parse_url
解析URL,然後您需要做的就是獲取url
查詢參數。那是parse_str
。
什麼與編碼 - 你有原始字符串? – SmokeyPHP
實際定義了一個URL。在你的示例字符串中,確實沒有單個URL。 – hakre
原始字符串太長 –