Reputation: 879
I want query Minecraft servers and get their version. But when I query servers In version I get strings:
BotFilter 1.8.x-1.12.x => I need get 1.12
BotFilter 1.8.x-1.12.x by hek.com Leymooo_s => I need get 1.12
Spigot 1.8.8 => I need get 1.8
Spigot 1.8.9 => I need get 1.8.9
BungeeCord 1.10-1.12x => I need get 1.12
Spigot 1.5.2 => I need 1.5.2
1.8.8 (Spigot) => I need get 1.8
1.9.2 Vanilla => 1.9
CraftBukkit 1.7.2 => I need get 1.7.2
BungeByGame 1.x-1.12.2 => I need get 1.12.2
Requires MC 1.8/1.9/1.10/1.11/1.12 => I need get 1.12
1.8.8 (CraftBukkit on Bukkit 1.8.8-R0.1-SNAPSHOT) => 1.8.8
I have regex:
$version = '1.8.8 (Spigot)';
preg_match('~^.*[ -]\K\d+(?:\.\d+)*~m', $version, $result);
But not working with string in variable $version
.. And maybe with other strings..
Upvotes: 0
Views: 352
Reputation: 48711
Use a negative lookbehind to make sure that there is no version character or English letter left after a digit:
^.*\K\d(?<![a-z\d.].)\d*(?:\.\d+)*+
PHP code (see demo):
$version = '1.8.8 (CraftBukkit on Bukkit 1.8.8-R0.1-SNAPSHOT)';
preg_match('~^.*\K\d(?<![a-z\d.].)\d*(?:\.\d+)*+~mi', $version, $result);
print_r($result[0]); // 1.8.8
Upvotes: 1