Я хочу получить только "чистую" версию URL без каких-либо параметров. IOW... если в URL-адресе есть вопросительный знак, удалите его и все после этого.
Вот моя текущая строка:
preg_match_all('/<a(.*?)href=("|\'|)(.*?)("|\'| )(.*?)>/s',$content,$ahref);
И просто для того, чтобы быть более ясным здесь... Я ожидаю, что этот URL (например):
/go/page/mobile_download_apps.html?&who=r,6GDewh28SCW3/fUSqmWqR_E9ljkcH1DheIMqgbiHjlX3OBDbskcuCZ22iDvk0zeZR7BEthcEaXGFWaQ4Burmd4eKuhMpqojjDE6BrCiUtLClkT32CejpMIdnqVOUmWBD
Было бы:
/go/page/mobile_download_apps.html
С DOMDocument, strpos, substr:
$dom = new DOMDocument;
$dom->loadHTML($content);
$linkNodeList = $dom->getElementsByTagName('a');
foreach($linkNodeList as $linkNode) {
$href = $linkNode->getAttribute('href');
if ( false !== ($offset = strpos($href, '?')) )
$linkNode->setAttribute('href', substr($href, 0, $offset));
}
$newContent = $dom->saveHTML();
или с взрывом:
$linkNode->setAttribute('href', explode('?', $href)[0]);
Вы имеете в виду это поведение:
<a\s+href\s*=\s*"\K[^"?]+
$result = preg_replace('/<a\s+href\s*=\s*"\K[^"?]+/im', '', $text);
Как упоминалось в комментариях, вы не должны получать тег с регулярным выражением, вы должны использовать синтаксический анализатор. Тем не менее, здесь вы идете:
<a[^>]+href=("|')([^"'?]*)[^"']*\1[^>]*>
[^\1]
не работают в классах символов.
Оппс... Отсутствие концентрации с моей стороны :)
Решил его сам... (Это было очень просто)
Вот окончательная строка:
preg_match_all('/<a(.*?)href=("|\'|)(.*?)(\?|"|\'| )(.*?)>/s',$content,$ahref);
/(<a href=")(.*)(\?.*)/s
(отсутствует некоторая информация, чтобы дать более подробный ответ ...)?
отсутствовал (И OP будет просто повторять эти вопросы регулярных выражений, не пытаясь понять, что они делают.)