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 关注
- 99 浏览
添加回答
举报