如果我有一个这样的字符串:
FOO[BAR]
我需要一种通用的方法来从字符串中取出"BAR“字符串,这样无论什么字符串在方括号之间,它都能够获得字符串。
例如:
FOO[DOG] = DOG
FOO[CAT] = CAT
发布于 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"
}
发布于 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(']'));
发布于 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
https://stackoverflow.com/questions/600733
复制相似问题