В настоящее время я использую это регулярное выражение для захвата всех URL-адресов в строке, которая может быть несколько строк и содержать любой другой вид текста, который отлично работает для обычных URL-адресов. Но я хочу заменить URL-адреса изображений по-другому, поэтому мое текущее выражение не может соответствовать этим URL-адресам.
Мое текущее выражение
(https?:\/\/([-\w\.]+[-\w])+(:\d+)?(\/([\w\/_\.#-]*(\?\S+)?[^\.\s])?)?)
Но я не хочу, чтобы он соответствовал URL-адресам, которые заканчиваются (jpe? G | png | gif), и я не смог точно определить, как использовать отрицательные образы RegEx.
На самом деле, было бы проще просто проверить URL-адреса после этого, сопоставляя все URL-адреса и затем проверяя их. Или используйте preg_replace_callback, который позволит вам проверить дополнительные вещи в матче и добавить дополнительную логику, чтобы проверить, какой тип URL-адреса. Вы просто переключаете значение замены с обратным вызовом, и все, что возвращается от обратного вызова, заменяется.
Но если вы хотите использовать одно регулярное выражение, поставьте что-то вроде этого в начале вашего шаблона: (?!\S+(?:png|gif|jpe?g))
который заставит URL-адрес не совпадать, если он имеет .(png|gif|jpe?g)
любом месте строки.
(?!\S+(?:png|gif|jpe?g))
что заставит URL не совпадать, если он имеет.(png|gif|jpe?g)
любом месте строки. пример