Fix issue with _ in package names in dart add (#3838)

diff --git a/lib/src/command/add.dart b/lib/src/command/add.dart
index eeae0c7..ddd3aac 100644
--- a/lib/src/command/add.dart
+++ b/lib/src/command/add.dart
@@ -347,7 +347,7 @@
 
   static final _argRegExp = RegExp(
     r'^(?:(?<prefix>dev|override):)?'
-    r'(?<name>[a-zA-Z0-9$.]+)'
+    r'(?<name>[a-zA-Z0-9_.]+)'
     r'(?::(?<descriptor>.*))?$',
   );
 
diff --git a/test/add/common/add_test.dart b/test/add/common/add_test.dart
index 512a7ae..f4a611b 100644
--- a/test/add/common/add_test.dart
+++ b/test/add/common/add_test.dart
@@ -33,6 +33,23 @@
     ]).validate();
   });
 
+  test('adds a package with a multi-component name from path', () async {
+    await d.dir('foo', [d.libPubspec('fo_o1.a', '1.0.0')]).create();
+
+    await d.appDir(dependencies: {}).create();
+
+    await pubAdd(args: ['fo_o1.a:{"path":"../foo"}']);
+
+    await d.appPackageConfigFile([
+      d.packageConfigEntry(name: 'fo_o1.a', path: '../foo'),
+    ]).validate();
+    await d.appDir(
+      dependencies: {
+        'fo_o1.a': {'path': '../foo'}
+      },
+    ).validate();
+  });
+
   group('normally', () {
     test('adds a package from a pub server', () async {
       final server = await servePackages();