diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb
index c15d403fc72ce7b471947de9ea18cc94c039da42..a521c53308004d62a875d08a643d978e3407a4e0 100644
--- a/Library/Homebrew/dev-cmd/bottle.rb
+++ b/Library/Homebrew/dev-cmd/bottle.rb
@@ -284,8 +284,13 @@ module Homebrew
         end
 
         ignores = []
-        if f.deps.any? { |dep| dep.name == "go" }
-          ignores << %r{#{Regexp.escape(HOMEBREW_CELLAR)}/go/[\d\.]+/libexec}
+        any_go_deps = f.deps.any? do |dep|
+          dep.name =~ Version.formula_optionally_versioned_regex(:go)
+        end
+        if any_go_deps
+          go_regex =
+            Version.formula_optionally_versioned_regex(:go, full: false)
+          ignores << %r{#{Regexp.escape(HOMEBREW_CELLAR)}/#{go_regex}/[\d\.]+/libexec}
         end
 
         relocatable = true
diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb
index f520748d6ab7750cb570d64af0b3e4c98cc41449..eb16b93d81d1099fe206c986066c670cd1c0f61c 100644
--- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb
+++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb
@@ -7,7 +7,7 @@ module FormulaCellarChecks
       formula.name.start_with?(formula_name)
     end
 
-    return if formula.name =~ /^php(@?\d+\.?\d*?)?$/
+    return if formula.name =~ Version.formula_optionally_versioned_regex(:php)
 
     return if MacOS.version < :mavericks && formula.name.start_with?("postgresql")
     return if MacOS.version < :yosemite  && formula.name.start_with?("memcached")
diff --git a/Library/Homebrew/rubocops/lines_cop.rb b/Library/Homebrew/rubocops/lines_cop.rb
index 141ab6fdf39286fd5547ee728ab77f01325bcf50..d1798154685ea9290c5c262af3a971261b974ebc 100644
--- a/Library/Homebrew/rubocops/lines_cop.rb
+++ b/Library/Homebrew/rubocops/lines_cop.rb
@@ -290,7 +290,7 @@ module RuboCop
 
           find_every_method_call_by_name(body_node, :system).each do |method_node|
             # Skip Kibana: npm cache edge (see formula for more details)
-            next if @formula_name =~ /^kibana(\@\d+(\.\d+)?)?$/i
+            next if @formula_name =~ /^kibana(@\d[\d.]*)?$/
             first_param, second_param = parameters(method_node)
             next if !node_equals?(first_param, "npm") ||
                     !node_equals?(second_param, "install")
diff --git a/Library/Homebrew/test/version_spec.rb b/Library/Homebrew/test/version_spec.rb
index c80998e528ca0a28b2c3ef1886529f0095e90477..7c61ffdf20913c53d34c50ee7dab364790fa2757 100644
--- a/Library/Homebrew/test/version_spec.rb
+++ b/Library/Homebrew/test/version_spec.rb
@@ -1,5 +1,11 @@
 require "version"
 
+describe Version do
+  specify ".formula_optionally_versioned_regex" do
+    expect(described_class.formula_optionally_versioned_regex("foo")).to match("foo@1.2")
+  end
+end
+
 describe Version::Token do
   specify "#inspect" do
     expect(described_class.new("foo").inspect).to eq('#<Version::Token "foo">')
diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb
index b6c0a79abcba2b2d78fc42d5c0a45f516c41162f..44253b17a1f190722a05a7e7526f2cc88b13717d 100644
--- a/Library/Homebrew/version.rb
+++ b/Library/Homebrew/version.rb
@@ -3,6 +3,10 @@ require "version/null"
 class Version
   include Comparable
 
+  def self.formula_optionally_versioned_regex(name, full: true)
+    /#{"^" if full}#{Regexp.escape(name)}(@\d[\d.]*)?#{"$" if full}/
+  end
+
   class Token
     include Comparable