: Извлечь и заменить подстроку с помощью Regex в Java - PullRequest
0 голосов
/ 09 октября 2011

У меня есть строка, которая содержит следующую подстроку один или несколько раз:

(DynamicContent(abc.xyz))

Я хочу заменить всю эту подстроку другой строкой, которая зависит от abc и xyz. Поэтому я хочу сначала извлечь их обоих по отдельности. Все это должно быть сделано с использованием Java.

Пример:
Строка ввода: (DynamicContent(box-shadow.css)):0px 2px 10px #330000;
Выходная строка: -moz-box-shadow:0px 2px 10px #330000; (зависит от браузера клиента)

Я нахожу выходную строку, используя box-shadow и css.

Ответы [ 3 ]

0 голосов
/ 09 октября 2011

В этом случае я бы создал шаблон регулярного выражения для фрагмента DynamicContent с группами соответствия для текста перед DynamicContent и ваших двух параметров (abc и xyz). Затем вы можете отсканировать свой текст, используя метод Matcher.find (), и создать свой вывод, используя значения ваших групп соответствия.

0 голосов
/ 09 октября 2011

Это найдет ваши группы:

List<String> matchList = new ArrayList<String>();
try {
    Pattern regex = Pattern.compile("\\(([^(]+)\\.([^)]+)");
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        matchList.add(regexMatcher.group(1));
        matchList.add(regexMatcher.group(2));
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

Применительно к:

(DynamicContent(abc.xyz))

Получает содержимое внутренних скобок и групп, что бы ни было раньшев группу 1 и все, что будет после.в группу 2.

Надеюсь, это поможет:)

0 голосов
/ 09 октября 2011

\(DynamicContent\(box-shadow\.css\)\) должно совпадать, просто экранируйте все метасимволы .

В Java регулярное выражение:

\\(DynamicContent\\(box-shadow\\.css\\)\\)

Чтобы получить box-shadow и css в разных группах, используйте:

\\(DynamicContent\\((box-shadow)\\.(css)\\)\\) если вам нужно только сопоставить эту конкретную строку или более универсальную цель: \\(DynamicContent\\((.+)\\.(\\w+)\\)\\)

...