java - 正则表达式提取两个字符之间的字符串

标签 java regex

我想使用 Java 中的正则表达式提取给定字符串中以下字符之间的字符串:

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

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

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

我正在使用上面给出的代码片段,它无法提取我想要的字符串。我做错了什么吗?同时,我对正则表达式还很陌生。

最佳答案

matches()方法尝试将正则表达式与整个字符串进行匹配。如果你想匹配字符串的一部分,你需要 find()方法:

if (matcher.find())

但是,您可以构建一个正则表达式来同时匹配所有三个部分:

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);
}

演示:http://ideone.com/8t2EC

关于java - 正则表达式提取两个字符之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724038/

相关文章:

java - 如何在iReport中显示每组一次绑定(bind)的详细信息?

java - 在 Java 中使用正则表达式链接文本

c# - 使用 Regex 解析 URL,忽略 Markdown 中的代码块和代码片段

regex - 从电子邮件地址中提取域名的一行代码

正则表达式,编写玩具编译器,解析,注释删除器

java - Apache HTTPClient 抛出 java.net.SocketException : Connection reset for many domains

java - 为什么慢任务会阻塞该使用并行流的程序中的其他较小任务?

java.io.StreamCorruptedException : invalid stream header: 4920616D

java - 操作栏拉伸(stretch)选项卡

javascript - 用于删除评论javascript的正则表达式