Согласно RegexBuddy используйте это как свое регулярное выражение
\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[A-Z0-9+&@#/%=~_|]
и это как ваш синтаксис замены
<a href="\0">\0</a>
Логика состоит в том, чтобы искать все допустимые символы URL и останавливаться, как только вы встретите недопустимый символ, например пробел или правую скобку.
Если вы еще не опробовали их инструмент, я настоятельно рекомендую его. Это отличный инструмент обучения, поскольку он анализирует регулярные выражения и конвертирует их в простой английский.
Он также поставляется с огромной библиотекой полезных выражений, таких как этот, и это довольно дешево.