thewind1984
Новичок
Отрицание конкретного слова в регулярных выражениях
Всем доброго времени суток!
Возникла проблема, без решения которой работа стопорится.
Обрабатываю все ссылки внутри одного документа, которые могут быть полными и вести на этот же сервер (href="http://THIS_SERVER.COM/folder1/file1.php"), неполными и вести на этот же сервер (href="/folder1/file1.php"), а также полными и вести на другой сервер (href="OTHER_SERVER.COM/some_folder/someFile.php"). Целью является приведение всех внутренних ссылок (полных и неполных) к полным. Для этого по идее надо проверять, что идет после конструкции href=" - есть 2 варинта (которые будут рассматриваться): http:// и адрес нашего сервера либо не http://. Написал следующее выражение:
Но это работает некорректно, потому что если после href=" в составе первых 4-х символов попадется что-нибудь из (h,t,p), то конструкция не будет учтена. Там может быть, например: href="show.php" - буква h есть, значит проехали. А меня интересует только http. Отсюда вопрос: как задать отрицание НЕ класса символов, а именно целого конкретного слова? Были идеи разбивать нужное слово на символы, но не получилось. Подскажите пожалуйста!
P.S. Просьба не пинать сильно, если не смог найти - перерыл половину гугла и сайтов по PHP - везде только отрицание класса символов.
Всем доброго времени суток!
Возникла проблема, без решения которой работа стопорится.
Обрабатываю все ссылки внутри одного документа, которые могут быть полными и вести на этот же сервер (href="http://THIS_SERVER.COM/folder1/file1.php"), неполными и вести на этот же сервер (href="/folder1/file1.php"), а также полными и вести на другой сервер (href="OTHER_SERVER.COM/some_folder/someFile.php"). Целью является приведение всех внутренних ссылок (полных и неполных) к полным. Для этого по идее надо проверять, что идет после конструкции href=" - есть 2 варинта (которые будут рассматриваться): http:// и адрес нашего сервера либо не http://. Написал следующее выражение:
PHP:
// removing all full links except external links
$code = preg_replace("/(".implode("|",$separs).")([ ]?)=([ ]?)([\"']?)(https?:\/\/".$host."|([^http]{4}))/", "\\1=\\4!incl_turl!\\6", $code);
P.S. Просьба не пинать сильно, если не смог найти - перерыл половину гугла и сайтов по PHP - везде только отрицание класса символов.