PHP RegEx заменяет все URL, которые не являются изображениями

1

В настоящее время я использую это регулярное выражение для захвата всех URL-адресов в строке, которая может быть несколько строк и содержать любой другой вид текста, который отлично работает для обычных URL-адресов. Но я хочу заменить URL-адреса изображений по-другому, поэтому мое текущее выражение не может соответствовать этим URL-адресам.

Мое текущее выражение

(https?:\/\/([-\w\.]+[-\w])+(:\d+)?(\/([\w\/_\.#-]*(\?\S+)?[^\.\s])?)?)

Но я не хочу, чтобы он соответствовал URL-адресам, которые заканчиваются (jpe? G | png | gif), и я не смог точно определить, как использовать отрицательные образы RegEx.

  • 1
    Действительно, было бы легче просто проверить URL после сопоставления всех URL, а затем проверить их. Или используйте preg_replace_callback, который позволит вам проверить дополнительные вещи в совпадении и добавить дополнительную логику, чтобы проверить, какой это тип URL. Но, если вы хотите использовать одно регулярное выражение, поместите что-то вроде этого в начале вашего шаблона: (?!\S+(?:png|gif|jpe?g)) что заставит URL не совпадать, если он имеет .(png|gif|jpe?g) любом месте строки. пример
  • 0
    Да, сделал это. Я был почти там, но я не пробовал начало этой строки, но это сработало отлично. Возможно, мне придется взглянуть на ту другую функцию, о которой вы упомянули, поскольку я не знал о такой функции, но, похоже, у меня было бы намного больше контроля и власти над тем, что я делаю. Спасибо!
Теги:
url
preg-replace

1 ответ

3
Лучший ответ

На самом деле, было бы проще просто проверить URL-адреса после этого, сопоставляя все URL-адреса и затем проверяя их. Или используйте preg_replace_callback, который позволит вам проверить дополнительные вещи в матче и добавить дополнительную логику, чтобы проверить, какой тип URL-адреса. Вы просто переключаете значение замены с обратным вызовом, и все, что возвращается от обратного вызова, заменяется.

Но если вы хотите использовать одно регулярное выражение, поставьте что-то вроде этого в начале вашего шаблона: (?!\S+(?:png|gif|jpe?g)) который заставит URL-адрес не совпадать, если он имеет .(png|gif|jpe?g) любом месте строки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню