怎么消除?在此字符串中使用 preg_mach

你好有这个字符串


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);

答案是这样的:


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?


)

我该如何消除?数组 [3] 中的最后一个,我尝试了不同的选项,但什么也没有。


心有法竹
浏览 100回答 2
2回答

守着星空守着你

您可以将问号放在捕获组之外,并且由于它是前一个组的一部分(可选),因此您可以使用以下命令将问号本身设为可选\??要匹配中间的部分,如果您想匹配 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        ))

qq_花开花谢_0

您可以使用特定的工具来操作 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"
打开App,查看更多内容
随时随地看视频慕课网APP