我正在嘗試從網站中提取所有 CSS 檔案 URL,這是我的代碼:
<?php
$re = '/(?<=href=[\'\"])[^"] \.css/mi';
$str = file_get_contents('test.html');
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
它適用于這個:
<link rel="stylesheet" type="text/css" href="http://example.com/mystyle.css">
和這個:<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
但不適用于這個:
<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
輸出將是:
array(1) {
[0]=>
array(1) {
[0]=>
string(185) "http://example.com/mystyle.css'>
<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css'>
<link rel='stylesheet' type='text/css' href='http://example.com/mystyle.css"
}
}
uj5u.com熱心網友回復:
您的正則運算式的問題是貪婪。將 更改為 , ?因此不會貪婪地在第一場比賽而不是最后一場比賽中停止它。
(?<=href=[\'"])[^"] ?\.css
- 注意引號也不需要在正則運算式中轉義。您所做的轉義僅適用于 PHP,因此您只需要轉義單引號。
- 如果單引號也用于封裝,那么您的否定字符類將是不正確的。
- 的
m,因為你的正則運算式是不使用錨不需要修改。
我認為:
href=(["'])(. ?[.]css)\1
會好一點,但也有缺陷。決議器將是實作這一目標的更好方法。
索引 2 將(應該)包含您的 URL。https://regex101.com/r/MfBmMq/1/
uj5u.com熱心網友回復:
永遠不要用正則運算式決議 HTML。你最終會感到沮喪。
改用像https://github.com/paquettg/php-html-parser這樣的 HTML 決議器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367762.html
