You are missing a colon in this part [-\w/_\.:]* but as you only use $m[1] in the callback code you can simplify the pattern and omit using capture groups at all and make use of the full match with $m[0]
Note that you don't have to escape the dot \. in a character class, and \w also matches _ so you don't have to add that separately to the character class.
https?://(?:[-\w.]+)+(?::\d+)?(?:/(?:[-\w/.:]*(?:\?\S+)?)?)?
The pattern matches:
https?:// Match the protocol with an optional s
(?:[-\w.]+)+ Repeat 1+ times matching one of the listed in the character class
(?::\d+)? Optionally match : and 1+ digits
(?: Non capture group
/ Match literally
(?: Non capture group
[-\w/.:]* Optionally repeat matching one of the listed in the character class
(?:\?\S+)? Optionally match ? and 1+ non whitespace chars
)? Close non capture group and make it optional
)? Close non capture group and make it optional
For example
$text = "https://something.com/something_something:moresomething";
$pattern = '@https?://(?:[-\w.]+)+(?::\d+)?(?:/(?:[-\w/.:]*(?:\?\S+)?)?)?@';
$text = preg_replace_callback($pattern, function($m) {
return '<a href="' . $m[0] . '" target="_blank">' . substr($m[0], 0, 75) . '</a>';
}, $text);
echo $text;
Output
<a href="https://something.com/something_something:moresomething" target="_blank">https://something.com/something_something:moresomething</a>