rawSchemeSpecificPart = getURIGroup(matcher, SCHEME_SPEC_PART_GROUP);
rawSchemeSpecificPart = matcher.group(SCHEME_SPEC_PART_GROUP); schemeSpecificPart = unquote(rawSchemeSpecificPart); if (!isOpaque()) {
  private void parseURI(String str) throws URISyntaxException  {    Pattern pattern = Pattern.compile(URI_REGEXP);    Matcher matcher = pattern.matcher(str);        if (matcher.matches())      {	scheme = getURIGroup(matcher, SCHEME_GROUP);	rawSchemeSpecificPart = getURIGroup(matcher, SCHEME_SPEC_PART_GROUP);	rawAuthority = getURIGroup(matcher, AUTHORITY_GROUP);	rawPath = getURIGroup(matcher, PATH_GROUP);	rawQuery = getURIGroup(matcher, QUERY_GROUP);	rawFragment = getURIGroup(matcher, FRAGMENT_GROUP);      }    else      throw new URISyntaxException(str, "doesn't match URI regular expression");    if (rawAuthority != null)      {	pattern = Pattern.compile(AUTHORITY_REGEXP);	matcher = pattern.matcher(rawAuthority);	if (matcher.matches())	  {	    rawUserInfo = getURIGroup(matcher, AUTHORITY_USERINFO_GROUP);	    rawHost = getURIGroup(matcher, AUTHORITY_HOST_GROUP);	    String portStr = getURIGroup(matcher, AUTHORITY_PORT_GROUP);	    if (portStr != null)	      try		{		  port = Integer.parseInt(portStr);		}	      catch (NumberFormatException e)		{		  URISyntaxException use =		    new URISyntaxException		      (str, "doesn't match URI regular expression");		  use.initCause(e);		  throw use;		}	  }	else	  throw new URISyntaxException(str, "doesn't match URI regular expression");      }    // We must eagerly unquote the parts, because this is the only time    // we may throw an exception.    schemeSpecificPart = unquote(rawSchemeSpecificPart);    authority = unquote(rawAuthority);    userInfo = unquote(rawUserInfo);    host = unquote(rawHost);    path = unquote(rawPath);    query = unquote(rawQuery);    fragment = unquote(rawFragment);  }