Как вернуть в переменную найденое вхождение по регулярке? - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 24.03.2015, 14:02   #1
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Как вернуть в переменную найденое вхождение по регулярке?

Мб, это элементарщина, но в яве не силен, в нете так и не смог найти.
Нужно в комунке реализовать типо "шаблонизатор", чтобы %copyright% менялось на содержимое "copyright.htm"
Не знаю как вернуть найденное регулярное выражение в переменную find
 
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);
}
Code: Java
Dementor вне форума Ответить с цитированием
Непрочитано 24.03.2015, 14:21   #2
-

По умолчанию Re: Как вернуть в переменную найденое вхождение по регулярке?

Код:
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?
shegan вне форума Ответить с цитированием
Непрочитано 24.03.2015, 14:29   #3
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Re: Как вернуть в переменную найденое вхождение по регулярке?

Цитата:
Сообщение от 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 минут
Все работает как надо!

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);
}
Code: Java

Последний раз редактировалось Dementor; 24.03.2015 в 14:36. Причина: Добавлено сообщение
Dementor вне форума Ответить с цитированием
Непрочитано 24.03.2015, 14:39   #4
-

По умолчанию Re: Как вернуть в переменную найденое вхождение по регулярке?

Видимо, я неправильно понял что Вам требуется)
Рад, что все работает, обращайтесь!

И, кстати,
Код:
 
            String find = m.group(0);
            String find_1 = m.group(1);
            html = html.replaceAll(find, find_1 + ".html!");
этого достаточно в теле цикла.
shegan вне форума Ответить с цитированием
Непрочитано 24.03.2015, 14:50   #5
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Re: Как вернуть в переменную найденое вхождение по регулярке?

Цитата:
Сообщение от shegan Посмотреть сообщение
Видимо, я неправильно понял что Вам требуется)
Рад, что все работает, обращайтесь!

И, кстати,
Код:
 
            String find = m.group(0);
            String find_1 = m.group(1);
            html = html.replaceAll(find, find_1 + ".html!");
этого достаточно в теле цикла.
оО спасибо)) не знал, ява весьма удобна.
Dementor вне форума Ответить с цитированием
Непрочитано 26.03.2015, 22:56   #6
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Re: Как вернуть в переменную найденое вхождение по регулярке?

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

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

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


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 17:12. Часовой пояс GMT +3.

Вверх