PHP preg_match()蒸汽链接验证错误

What's wrong with this preg_match() usage? I want to check steam lobby link and if it's matching then write to database. If not, just echo the error. I am doing this through ajax. Is it better to do this with ajax or $_SERVER["REQUEST_METHOD"] == "POST"?

<?php
require("../includes/config.php");
$lobby = "steam://joinlobby/730/109775243427128868/76561198254260308";
if (!preg_match("%^((steam?:)+(/joinlobby\/730\/)+([0-9]{17,25}\/.?)+([0-9]{17,25})/$)%i", $lobby)) {
    echo "Lobby link isn't formatted correctly.";
}
else {
    $rank = "Golden";
    $mic = "No";
    try {
       $stmt=$db->prepare("INSERT INTO created_lobby (lobby_link, current_rank, have_mic) VALUES (:lobby_link, '$rank', '$mic')");
       $stmt->execute(array(
       ':input_link' => $_POST['lobbyLink']
       ));
    }
    catch(PDOException $e) {
       echo "Error: " . $e->getMessage();
    }
}
?>

My Problem: When I execute this code, it will give me false.

Thank you for help.

This works:

$lobby = "steam://joinlobby/730/109775243427128868/76561198254260308";
if (!preg_match("%^(steam?:)+(//joinlobby/730/)+([0-9]{17,25}/.?)+([0-9]{17,25}$)%i", $lobby)) {
    echo "Lobby link isn't formatted correctly.";
}

I changed /joinlobby to //joinlobby, and remove the / at the end. I also removed the unnecessary () around everything.

I suspect you also shouldn't have (...)+ around steam?: and //joinlobby/730/. They'll cause repeated uses of those prefixes to be accepted as correct, e.g. steam:steam:...