I have String user@domain:port
I want to fetch user, domain and port from this String.
So I created regex:
public static final String MATCH_USER_DOMAIN_PORT = "^([0-9,a-zA-Z-.*_]+)@([a-z0-9]+[\\.-][a-z0-9]+\\.[a-z]{2,}+):(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3})$";
and this is my method in Unitest so far:
public void test____matchesUserDomainWithPort(){
     String identityText = "maxim@domain.com:5555";
        String user = "";
        String domain = "";
        String port = "";
        if(identityText.matches(MATCH_USER_DOMAIN_PORT))
        {                                
            Pattern p = Pattern.compile(MATCH_USER_DOMAIN_PORT);
            Matcher m = p.matcher(identityText);
            user = m.group(1);
            domain= m.group(2);
            port= m.group(3);
        }
    assertEquals("maxim", user);
    assertEquals("domain.com", domain);
    assertEquals("5555", port);
}
I get error:
 java.lang.IllegalStateException: No successful match so far
 at java.util.regex.Matcher.ensureMatch(Matcher.java:607)
 ....
in row: user = m.group(1);
I opened http://gskinner.com/RegExr/?2v5r0
and there all seems good:
Output:
RegExp: /^([0-9,a-zA-Z-.*_]+@[a-z0-9]+([\.-][a-z0-9]+)*)+\.[a-z]{2,}+:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})$/
pattern: ^([0-9,a-zA-Z-.*_]+@[a-z0-9]+([\.-][a-z0-9]+)*)+\.[a-z]{2,}+:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})$
flags: 
3 capturing groups: 
   group 1: ([0-9,a-zA-Z-.*_]+@[a-z0-9]+([\.-][a-z0-9]+)*)
   group 2: ([\.-][a-z0-9]+)
   group 3: (6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})
Do I miss something?
in C i just write: sscanf(identityText,"%[^@]@%[^:]:%511s",user,domain,port);
For sure I can split this text with @ and : and get 3 values, but its interesting how to do that in gentle form :)
Please, help
 
     
     
    