ssk
ssk

Reputation: 9255

regex extract string between two characters

I would like to extract the strings between the following characters in the given string using regex in Java:

/*
1) Between \" and \"   ===> 12222222222
2) Between :+ and @    ===> 12222222222
3) Between @ and >     ===> 192.168.140.1
*/

String remoteUriStr = "\"+12222222222\" <sip:[email protected]>";
String regex1 = "\"(.+?)\"";
String regex2 = ":+(.+?)@";
String regex3 = "@(.+?)>";

Pattern p = Pattern.compile(regex1);
Matcher matcher = p.matcher(remoteUri);
if (matcher.matches()) {
    title = matcher.group(1);
}

I am using the above given code snippet, its not able to extract the strings that I want it to. Am I doing anything wrong? Meanwhile, I am quite new to regex.

Upvotes: 2

Views: 5235

Answers (2)

Joey
Joey

Reputation: 354356

If your input always looks like that and you always want the same parts from it you can put that in a single regex (with multiple capturing groups):

"([^"]+)" <sip:([^@]+)@([^>]+)>

So you can then use

Pattern p = Pattern.compile("\"([^\"]+)\" <sip:([^@]+)@([^>]+)>");
Matcher m = p.matcher(remoteUri);
if (m.find()) {
  String s1 = m.group(1);
  String s2 = m.group(2);
  String s3 = m.group(3);
}

Upvotes: 3

mellamokb
mellamokb

Reputation: 56769

The matches() method attempts to match the regular expression against the entire string. If you want to match a part of the string, you want the find() method:

if (matcher.find())

You could, however, build a single regular expression to match all three parts at once:

String regex = "\"(.+?)\" \\<sip:\\+(.+?)@(.+?)\\>";
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(remoteUriStr);
if (matcher.matches()) {
    title = matcher.group(1);
    part2 = matcher.group(2);
    ip = matcher.group(3);
}

Demo: http://ideone.com/8t2EC

Upvotes: 4

Related Questions