diff --git a/core/lib/Drupal/Core/Utility/Token.php b/core/lib/Drupal/Core/Utility/Token.php
index 4cfc63f..0f5d30e 100644
--- a/core/lib/Drupal/Core/Utility/Token.php
+++ b/core/lib/Drupal/Core/Utility/Token.php
@@ -185,9 +185,9 @@ public function scan($text) {
     // $type may not contain : or whitespace characters, but $name may.
     preg_match_all('/
       \[             # [ - pattern start
-      ([^\s\[\]:]*)  # match $type not containing whitespace : [ or ]
+      ([^\s\[\]:]+)  # match $type not containing whitespace : [ or ]
       :              # : - separator
-      ([^\[\]]*)     # match $name not containing [ or ]
+      ([^\[\]]+)     # match $name not containing [ or ]
       \]             # ] - pattern end
       /x', $text, $matches);
 
diff --git a/core/modules/system/src/Tests/System/TokenScanTest.php b/core/modules/system/src/Tests/System/TokenScanTest.php
index 4cb2d69..65fc041 100644
--- a/core/modules/system/src/Tests/System/TokenScanTest.php
+++ b/core/modules/system/src/Tests/System/TokenScanTest.php
@@ -24,12 +24,18 @@ function testTokenScan() {
     // strings.
     $text = 'First a [valid:simple], but dummy token, and a dummy [valid:token with: spaces].';
     $text .= 'Then a [not valid:token].';
+    $text .= 'Then an [:empty token type].';
+    $text .= 'Then an [empty token:].';
+    $text .= 'Then a totally empty token: [:].';
     $text .= 'Last an existing token: [node:author:name].';
     $token_wannabes = \Drupal::token()->scan($text);
 
     $this->assertTrue(isset($token_wannabes['valid']['simple']), 'A simple valid token has been matched.');
     $this->assertTrue(isset($token_wannabes['valid']['token with: spaces']), 'A valid token with space characters in the token name has been matched.');
     $this->assertFalse(isset($token_wannabes['not valid']), 'An invalid token with spaces in the token type has not been matched.');
+    $this->assertFalse(isset($token_wannabes['empty token']), 'An empty token has not been matched.');
+    $this->assertFalse(isset($token_wannabes['']['empty token type']), 'An empty token type has not been matched.');
+    $this->assertFalse(isset($token_wannabes['']['']), 'An empty token and type has not been matched.');
     $this->assertTrue(isset($token_wannabes['node']), 'An existing valid token has been matched.');
   }
 
