如何在PHP中使用preg_replace来使用正则表达式更改href标记中域的多次出现。
我只需要链接的相对路径。我拥有的代码删除了所有内容,包括网址路径和查询参数。
当前链接的出现
<a href="https://www.website.com/LUGAD-Clothing-Jewelry-Shoulder-Brushed/dp/B07D1V99MF/ref=sr_1_3/131-4937141-2376367/s=apparel&ie=UTF8&qid=1531422091&sr=1-3&nodeID=7141123011&psd=1&keywords=clothing%2Cshoes+and+jewelry">The Link</a>
所需链接出现
<a href="/LUGAD-Clothing-Jewelry-Shoulder-Brushed/dp/B07D1V99MF/ref=sr_1_3/131-4937141-2376367/s=apparel&ie=UTF8&qid=1531422091&sr=1-3&nodeID=7141123011&psd=1&keywords=clothing%2Cshoes+and+jewelry">The Link</a>
我已经尝试过了
$html = $this->curl->getContent($completeUrl);
$newhtml = preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a$1href="/"$3>',$html);
摘要。 我很想使用正则表达式将所有出现的绝对href转换为相对href
答案 0 :(得分:1)
根据您的疑问,您应该使用这样的正则表达式:
(<a\s+href\s*=\s*")(?:https?:\/\/)?www\.website\.com\/
preg_replace('/(<a\s+href\s*=\s*")(?:https?:\/\/)?www\.website\.com\//i', '$1', $str);
这基于您的想法,即使用a-href作为替换的锚点。
我们不能真正在URL之前使用后向断言来断言a-href,因为可以有任意空格,并且PCRE不支持后向变长模式。
因此,我捕获了前面,并使用$1
将其放回了替换中。
如果您必须在href
之前处理其他属性,可以使用:
(<a(?:(?!href).)* href\s*=\s*")(?:https?:\/\/)?www\.website\.com\/