Мне нужно регулярное выражение, которое позволяет извлечь часть из String. Я получаю эту строку, анализируя XML-документ с DOM. Затем я ищу часть "§regex" в этой строке, и теперь я пытаюсь извлечь ее. например "([A-ZÄÖÜ] {1,3} [-] [AZ] {1,2} [1-9] [0-9] {0,3}) от остальных.
Проблема в том, что я не знаю, как убедиться, что извлеченная часть заканчивается символом "). Это регулярное выражение должно работать для каждого заданного значения. Цель состоит в том, чтобы написать только значение в скобках после "§regex =", включая скобки в строку.
<UML:TaggedValue tag="description" value=" random Text §regex=([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3}) random text"/>
private List<String> findRegex() {
List<String> forReturn = new ArrayList<String>();
for (String str : attDescription) {
if (str.contains("§regex=")) {
String s = str.replaceAll(regex);
forReturn.add(s);
}
}
return forReturn;
}
attDescription - это список, содержащий все атрибуты, найденные в анализируемом XML-документе.
До сих пор я пробовал это регулярное выражение: ".*(§regex=)(.*)[)$].*", "$2"
но это отключает ")" и не удаляет текст infront искомой части. Даже с помощью этого http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html я действительно не понимаю, как получить то, что мне нужно.
Кажется, это работает для меня (с этим примером в любом случае), если я использую это вместо String s = str.replaceAll(regex);
String s = str.replaceAll( ".*§regex=(\\(.*\\)).*", "$1" );
Он просто ищет подстроку, заключенную в круглые скобки, следующую за §regex=
.
Это похоже на работу:
String s = str.replaceAll(".*§regex=\\((.*)[)].*", "$1");
Заметка:
Тестовый код, отмечая, что это работает с скобками в/вокруг регулярного выражения:
String str = "random Text §regex=(([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3})) random text";
String s = str.replaceAll(".*§regex=\\((.*)[)].*", "$1");
System.out.println(s);
Вывод:
([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3})
=regex[squiggle]
. Тогда у вас будет четкий разделитель для поиска. У вас есть контроль над входом таким образом? (Я бы также подумал о том, чтобы использовать более стандартный символ, кроме того, что в загонах).