diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 3c9d59b1f402fec9f235ab7c8951f0a5c0e300ad..9a7bc27f8be16d558f4ef1429a788940bc3d369b 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,10 @@
+2005-02-08  Tom Tromey  <tromey@redhat.com>
+
+	* java/net/URI.java (AUTHORITY_REGEXP): Handle case where user
+	name or port is missing.
+	(AUTHORITY_USERINFO_GROUP, AUTHORITY_HOST_GROUP,
+	AUTHORITY_PORT_GROUP): Updated.
+
 2005-02-08  Tom Tromey  <tromey@redhat.com>
 
 	* configure: Rebuilt.
diff --git a/libjava/java/net/URI.java b/libjava/java/net/URI.java
index 4de5095bbbbbac94adc8dc1633745ab5f5391bf4..23e3e7c9e4a2248ba5b0cd4a80bb7ee2ce1f16c4 100644
--- a/libjava/java/net/URI.java
+++ b/libjava/java/net/URI.java
@@ -65,7 +65,7 @@ public final class URI implements Comparable, Serializable
     "^(([^:/?#]+):)?((//([^/?#]*))?([^?#]*)(\\?([^#]*))?)?(#(.*))?";
 
   private static final String AUTHORITY_REGEXP =
-    "^(([^?#]*)@([^?#]*):([^?#]*))?";
+    "^((([^?#]*)@)?([^?#:]*)(:([^?#]*)))?";
 
   /**
    * Valid characters (taken from rfc2396)
@@ -115,9 +115,9 @@ public final class URI implements Comparable, Serializable
    */
   private static final int FRAGMENT_GROUP = 10;
   
-  private static final int AUTHORITY_USERINFO_GROUP = 2;
-  private static final int AUTHORITY_HOST_GROUP = 3;
-  private static final int AUTHORITY_PORT_GROUP = 4;
+  private static final int AUTHORITY_USERINFO_GROUP = 3;
+  private static final int AUTHORITY_HOST_GROUP = 4;
+  private static final int AUTHORITY_PORT_GROUP = 6;
   
   private transient String scheme;
   private transient String rawSchemeSpecificPart;