Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Как вернуть в переменную найденое вхождение по регулярке?
#1
Мб, это элементарщина, но в яве не силен, в нете так и не смог найти.
Нужно в комунке реализовать типо "шаблонизатор", чтобы %copyright% менялось на содержимое "copyright.htm"
Не знаю как вернуть найденное регулярное выражение в переменную find
[SRC="java"]
Pattern p = Pattern.compile("%([^%]+)%");
Matcher m = p.matcher(html);

while( m.matches() )
{

String find =''; // как сюда записать найденное вхождение для дальнейше замены?
html = html.replaceAll(find, "copyright.html");

p = Pattern.compile("%([^%]+)%");
m = p.matcher(html);
}[/SRC]
Ответ
#2
Код:
String html = "zzz%a%qqq%b%xxx";

Pattern p = Pattern.compile("%([^%]+)%");
Matcher m = p.matcher(html);

while(m.find()) {
    String find = m.group(0);
    html = html.replaceAll(find, "copyright.html");
    p = Pattern.compile("%([^%]+)%");
    m = p.matcher(html);
}

Стоит отметить, что это странный подход.
Ведь в таком случае %a%, %b% заменятся на copyright.html.
Почему бы не реплейсить %copyright% на copyright.html?
Ответ
#3
shegan Написал:
Код:
String html = "zzz%a%qqq%b%xxx";

Pattern p = Pattern.compile("%([^%]+)%");
Matcher m = p.matcher(html);

while(m.find()) {
    String find = m.group(0);
    html = html.replaceAll(find, "copyright.html");
    p = Pattern.compile("%([^%]+)%");
    m = p.matcher(html);
}

Стоит отметить, что это странный подход.
Ведь в таком случае %a%, %b% заменятся на copyright.html.
Почему бы не реплейсить %copyright% на copyright.html?


c find() и group() уже нашел))) разобрался, но все-ранво спасибо! В том то и дело, я меняю по первому вхождению все, или что-то неправильно?(( Я же не поставил регулярку сразу перед replaceAll(). Он сначала находит, а потом меняет по готовой строке все в Html, далее опять находит и меняеет (по while), до тех пор пока не закончится поиск

Добавлено через 5 минут
Все работает как надо!

[SRC="java"]Pattern p = Pattern.compile("%([^%]+)%");
Matcher m = p.matcher(html);

while( m.find() )
{
String find = m.group(0);
String find_1 = m.group(1);
html = html.replaceAll(find, find_1 + ".html!");

p = Pattern.compile("%([^%]+)%");
m = p.matcher(html);
}[/SRC]
Ответ
#4
Видимо, я неправильно понял что Вам требуется)
Рад, что все работает, обращайтесь!

И, кстати,
Код:
String find = m.group(0);
            String find_1 = m.group(1);
            html = html.replaceAll(find, find_1 + ".html!");

этого достаточно в теле цикла.
Ответ
#5
shegan Написал:Видимо, я неправильно понял что Вам требуется)
Рад, что все работает, обращайтесь!

И, кстати,
Код:
String find = m.group(0);
            String find_1 = m.group(1);
            html = html.replaceAll(find, find_1 + ".html!");

этого достаточно в теле цикла.

оО спасибо)) не знал, ява весьма удобна.
Ответ
#6
Обнаружил косяк в регулярном выражении. Корректнее будет так: "%([A-Z]+)%"

А то начинает хватать левый текст с процентами в описании "%".

P.S. Для новичков, которые захотят использовать это. Т.е. разрешено использование в "процентах" только латинских БОЛЬШИХ букв без пробелов и прочего
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)