Вопрос-ответ

Using Java to find substring of a bigger string using Regular Expression

Использование Java для поиска подстроки строки большего размера с помощью регулярного выражения

Если у меня есть строка, подобная этой:

FOO[BAR]

Мне нужен общий способ получить строку "BAR" из строки, чтобы независимо от того, какая строка находится между квадратными скобками, она могла бы получить строку.

например

FOO[DOG] = DOG
FOO[CAT] = CAT
Переведено автоматически
Ответ 1

Вы должны уметь использовать нежадные кванторы, в частности * ?. Вероятно, вам понадобится следующее:

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

Это даст вам шаблон, который будет соответствовать вашей строке, и поместит текст в квадратные скобки в первой группе. Взгляните на Документацию Pattern API для получения дополнительной информации.

Чтобы извлечь строку, вы могли бы использовать что-то вроде следующего:

Matcher m = MY_PATTERN.matcher("FOO[BAR]");
while (m.find()) {
String s = m.group(1);
// s now contains "BAR"
}
Ответ 2

способ без регулярных выражений:

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(']'));
Ответ 3

Это рабочий пример :

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
Ответ 4
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public static String get_match(String s, String p) {
// returns first match of p in s for first group in regular expression
Matcher m = Pattern.compile(p).matcher(s);
return m.find() ? m.group(1) : "";
}

get_match("FOO[BAR]", "\\[(.*?)\\]") // returns "BAR"

public static List<String> get_matches(String s, String p) {
// returns all matches of p in s for first group in regular expression
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile(p).matcher(s);
while(m.find()) {
matches.add(m.group(1));
}
return matches;
}

get_matches("FOO[BAR] FOO[CAT]", "\\[(.*?)\\]")) // returns [BAR, CAT]
java regex string