首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >利用正则表达式在Java中查找较大字符串的子串

利用正则表达式在Java中查找较大字符串的子串
EN

Stack Overflow用户
提问于 2009-03-01 22:58:05
回答 11查看 357.5K关注 0票数 151

如果我有一个这样的字符串:

FOO[BAR]

我需要一种通用的方法来从字符串中取出"BAR“字符串,这样无论什么字符串在方括号之间,它都能够获得字符串。

例如:

FOO[DOG] = DOG
FOO[CAT] = CAT
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-03-01 22:59:57

您应该能够使用非贪婪量词,特别是*?您可能需要以下内容:

Pattern MY_PATTERN = Pattern.compile("\\[(.*?)\\]");

这将为您提供一个与您的字符串匹配的模式,并将文本放在第一组的方括号中。有关更多信息,请查看Pattern API Documentation

要提取字符串,可以使用类似于以下内容的内容:

Matcher m = MY_PATTERN.matcher("FOO[BAR]");
while (m.find()) {
    String s = m.group(1);
    // s now contains "BAR"
}
票数 269
EN

Stack Overflow用户

发布于 2009-03-01 23:02:01

非正则表达式的方式:

String input = "FOO[BAR]", extracted;
extracted = input.substring(input.indexOf("["),input.indexOf("]"));

或者,为了稍微提高性能/内存使用率(感谢Hosam):

String input = "FOO[BAR]", extracted;
extracted = input.substring(input.indexOf('['),input.lastIndexOf(']'));
票数 32
EN

Stack Overflow用户

发布于 2011-12-15 12:44:43

这是一个有效的示例:

RegexpExample.java

package org.regexp.replace;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexpExample
{
    public static void main(String[] args)
    {
        String string = "var1[value1], var2[value2], var3[value3]";
        Pattern pattern = Pattern.compile("(\\[)(.*?)(\\])");
        Matcher matcher = pattern.matcher(string);

        List<String> listMatches = new ArrayList<String>();

        while(matcher.find())
        {
            listMatches.add(matcher.group(2));
        }

        for(String s : listMatches)
        {
            System.out.println(s);
        }
    }
}

它显示:

value1
value2
value3
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/600733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档