2 回答

TA貢獻1799條經驗 獲得超8個贊
您可以將問號放在捕獲組之外,并且由于它是前一個組的一部分(可選),因此您可以使用以下命令將問號本身設為可選\??
要匹配中間的部分,如果您想匹配 2 個部分,還可以使用 2 個否定字符類
class="_2zACE" href="(\/tv-shows\/)([^/]*)\/([^/?]*)?\??start=true
/
例如,如果將分隔符從 更改為~
,則不必轉義反斜杠。
$url_pre_series = 'class="_2zACE" href="/tv-shows/521987/s01_e01_the_killings_at_badgers_drift?start=true"';
preg_match_all('~class="_2zACE" href="(\/tv-shows\/)([^/]*)\/([^/?]*)?\??start=true~',$url_pre_series,$url_lote_serie,PREG_SET_ORDER);
print_r($url_lote_serie);
輸出
Array
(
[0] => Array
(
[0] => class="_2zACE" href="/tv-shows/521987/s01_e01_the_killings_at_badgers_drift?start=true
[1] => /tv-shows/
[2] => 521987
[3] => s01_e01_the_killings_at_badgers_drift
)
)

TA貢獻1835條經驗 獲得超7個贊
您可以使用特定的工具來操作 HTML和解析 URL,這些工具通常比正則表達式更易于使用且更可靠:
$html = '<a class="_2zACE" href="/tv-shows/521987/s01_e01_the_killings_at_badgers_drift?start=true">Blah</a>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$url = $doc->getElementsByTagName('a')[0]->getAttribute('href');
$parsed = parse_url($url);
var_dump($url, $parsed['path']);
string(65) "/tv-shows/521987/s01_e01_the_killings_at_badgers_drift?start=true"
string(54) "/tv-shows/521987/s01_e01_the_killings_at_badgers_drift"
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報