diff --git a/lib/manager/dockerfile/__fixtures__/Dockerfile1 b/lib/manager/dockerfile/__fixtures__/1.Dockerfile
similarity index 100%
rename from lib/manager/dockerfile/__fixtures__/Dockerfile1
rename to lib/manager/dockerfile/__fixtures__/1.Dockerfile
diff --git a/lib/manager/dockerfile/__fixtures__/Dockerfile2 b/lib/manager/dockerfile/__fixtures__/2.Dockerfile
similarity index 82%
rename from lib/manager/dockerfile/__fixtures__/Dockerfile2
rename to lib/manager/dockerfile/__fixtures__/2.Dockerfile
index 2c2320d27793d5a52dda80f2bfcbc510dc721934..7d183600c45086ea52caa5585a3e088f1790286c 100644
--- a/lib/manager/dockerfile/__fixtures__/Dockerfile2
+++ b/lib/manager/dockerfile/__fixtures__/2.Dockerfile
@@ -21,23 +21,13 @@ FROM\
 COPY --from=image6 /path/1 /path/2
 
  COPY \
+	# comment1
 	--from=image7:1.0.0@sha256:abcdef \
 	/path/1 \
 	/path/2
 
 # COPY --from=image8
 
-COPY   --from=image9
-
-COPY\
-    --chown=root \
-	# comment1
-#
- #comment2
- --from=image10
-	# comment2
-    path1 path2
-
 COPY --chown=root --from=image11 / ./
 
 	COPY 	\
diff --git a/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap b/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap
index 7c0f2969618d241186a335be729f9497ef19e121..69e2aacbd4052e6d3a3b75f05af0312098052ef2 100644
--- a/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/dockerfile/__snapshots__/extract.spec.ts.snap
@@ -89,24 +89,6 @@ Array [
     "depType": "stage",
     "replaceString": "image7:1.0.0@sha256:abcdef",
   },
-  Object {
-    "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
-    "currentDigest": undefined,
-    "currentValue": undefined,
-    "datasource": "docker",
-    "depName": "image9",
-    "depType": "stage",
-    "replaceString": "image9",
-  },
-  Object {
-    "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
-    "currentDigest": undefined,
-    "currentValue": undefined,
-    "datasource": "docker",
-    "depName": "image10",
-    "depType": "stage",
-    "replaceString": "image10",
-  },
   Object {
     "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
     "currentDigest": undefined,
diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts
index 347664ebde61e6fedadf1a483964a382cfcb1c84..b6125467909d01ceebfc7fdb27c64587951d34ae 100644
--- a/lib/manager/dockerfile/extract.spec.ts
+++ b/lib/manager/dockerfile/extract.spec.ts
@@ -2,12 +2,12 @@ import { readFileSync } from 'fs';
 import { extractPackageFile, getDep } from './extract';
 
 const d1 = readFileSync(
-  'lib/manager/dockerfile/__fixtures__/Dockerfile1',
+  'lib/manager/dockerfile/__fixtures__/1.Dockerfile',
   'utf8'
 );
 
 const d2 = readFileSync(
-  'lib/manager/dockerfile/__fixtures__/Dockerfile2',
+  'lib/manager/dockerfile/__fixtures__/2.Dockerfile',
   'utf8'
 );
 
@@ -150,7 +150,7 @@ describe('lib/manager/dockerfile/extract', () => {
     it('extracts images from all sorts of (maybe multiline) FROM and COPY --from statements', () => {
       const res = extractPackageFile(d2).deps;
       expect(res).toMatchSnapshot();
-      expect(res).toHaveLength(11);
+      expect(res).toHaveLength(9);
     });
     it('handles calico/node', () => {
       const res = extractPackageFile('FROM calico/node\n').deps;
diff --git a/lib/manager/dockerfile/extract.ts b/lib/manager/dockerfile/extract.ts
index 6705b9ea2aed8d3d9d55106c6ee821577b527146..6019a926b0a9ad07ccd6c775607983a7b3b1b0e0 100644
--- a/lib/manager/dockerfile/extract.ts
+++ b/lib/manager/dockerfile/extract.ts
@@ -67,7 +67,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   const stageNames: string[] = [];
 
   const fromMatches = content.matchAll(
-    /^[ \t]*FROM(?:\\\r?\n| |\t|#.*\r?\n|-\S+)+(?<image>\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?<name>\S+))?/gim
+    /^[ \t]*FROM(?:\\\r?\n| |\t|#.*?\r?\n|[ \t]--[a-z]+=\w+?)*[ \t](?<image>\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?<name>\S+))?/gim
   );
 
   for (const fromMatch of fromMatches) {
@@ -94,7 +94,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   }
 
   const copyFromMatches = content.matchAll(
-    /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|-\S+)+--from=(?<image>\S+)/gim
+    /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|[ \t]--[a-z]+=\w+?)*[ \t]--from=(?<image>\S+)/gim
   );
 
   for (const copyFromMatch of copyFromMatches) {
diff --git a/lib/manager/gradle-lite/utils.spec.ts b/lib/manager/gradle-lite/utils.spec.ts
index 9f014b1e496a8e5fa063083404c61b1163e3ea61..639128ca968b11e61793364e4fa21fce6a7a1d88 100644
--- a/lib/manager/gradle-lite/utils.spec.ts
+++ b/lib/manager/gradle-lite/utils.spec.ts
@@ -42,6 +42,7 @@ describe('manager/gradle-lite/utils', () => {
     expect(isDependencyString("foo:bar:1.2.3'")).toBe(false);
     expect(isDependencyString('foo:bar:1.2.3"')).toBe(false);
     expect(isDependencyString('-Xep:ParameterName:OFF')).toBe(false);
+    expect(isDependencyString('foo$bar:baz:1.2.+')).toBe(false);
   });
 
   it('parseDependencyString', () => {
diff --git a/lib/manager/gradle-lite/utils.ts b/lib/manager/gradle-lite/utils.ts
index daf53ca4fc980240b582daef4bf27264595ed8b7..3731d895d8305787b694b1b6bdf1b69228a66932 100644
--- a/lib/manager/gradle-lite/utils.ts
+++ b/lib/manager/gradle-lite/utils.ts
@@ -10,7 +10,7 @@ import {
 } from './common';
 
 const artifactRegex = regEx(
-  '^[a-zA-Z][-_a-zA-Z0-9]*(?:.[a-zA-Z0-9][-_a-zA-Z0-9]*)*$'
+  '^[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*?)*$'
 );
 
 const versionLikeRegex = regEx('^(?<version>[-.\\[\\](),a-zA-Z0-9+]+)');