Jadasdas
Jadasdas

Reputation: 879

Regex get version on the string

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

Answers (1)

revo
revo

Reputation: 48711

Update

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+)*+

Live demo

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

Related Questions