JAVA获取特定字符第一次出现和最后一次出现之间的字符串

标签 java regex

假设我有这个字符串:

mystring
{
    a : 1
    b : 2
    c : { e :f}
    d : x
}

我该怎么做才能只得到第一个左大括号最后一个大括号之间的字符串

因此:

    a : 1
    b : 2
    c : { e :f}
    d : x

最佳答案

默认情况下,搜索是贪婪的。您需要非贪婪地找到您的第一个 { (.*?),而捕获应该再次贪婪地完成 (.*):

".*?\{(.*)\}.*"

完整代码为:

String s = // your input string
Pattern p = Pattern.compile(".*?\\{(.*)\\}.*");
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group(1));
}

你也可以在没有正则表达式的情况下做同样的事情,使用普通的 String 方法:

int start = s.indexOf("{") + 1;
int end = s.lastIndexOf("}");
if (start > 0 && end > start) {
    System.out.println(s.substring(start, end));
}

关于JAVA获取特定字符第一次出现和最后一次出现之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711880/

相关文章:

java - 在 java 中的子域之间共享 Cookie?

java - Android在使用捏缩放和临时图像调整文本大小时限制大小

c# - 正则表达式只允许数字字符加号、点和 E

python - 无法从给定格式中提取出生日期

regex - 如何验证正则表达式模式?

java-7 - 使用 openjdk7 在 Linux openshift 云服务器上运行 Glassfish 4

java - 使用 Apache POI 将文件嵌入到 Excel 中

java - Spring Boot 。从 MySql 模式自动创建实体类

python - 在 Pandas 中创建年份列

正则表达式验证十进制的正则表达式[19,3]