#^(\S+ \S+ \S+) .+?: (\S+?)\/(\S+).+? IPv4=([\d.]+)#
$text = preg_replace_callback(
'#\[url\]([\r\n]*)(http://|ftp://|https://|ftps://)([^\s\'\"]*?)([\r\n]*)\[/url\]#si',
function ($m) use($pathto) {
$link = $m[2].$m[3];
return "<a href='$pathto"
.base64_encode($link)
."' rel='nofollow' target='_blank' title='$link'>"
.trimlink($link, 20)
.(strlen($link)>30?substr($link, strlen($link)-10, strlen($link)):'')
.'</a>';
},
$text
);
1) "Стать авантюристом! ~ Как пройти подземелье с помощью панели навыков ~ 3 - 15"
Тут есть дефис перед 15.
2) "Я получил читерскую способность и был перенесен в иной мир, так что теперь я буду жить, как сам того захочу 2 Экстра"
Тут в строке совсем нет дефиса.
Если нужен один шаблон под эти варианты, то как-то так:
"\d+\s*(?:-\s*)?(.+)"