powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Несколько условий в одном регулярном выражении
10 сообщений из 10, страница 1 из 1
Несколько условий в одном регулярном выражении
    #38774470
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите плиз, как можно в одном регулярном выражении указать сразу несколько паттерном?
Например есть строка
"my string %1 and &2"
и я хочу заменить все цифры, что стоят после символа % - скажем на A, а все цифры, что стоят после символа & - на B
Мне придется делать как-то так

Код: java
1.
2.
3.
4.
5.
6.
 String source = "my string %1 and &2";
        String pattern1 = "(\\%)(\\d+)(\\W)";
        String pattern2 = "(\\&)(\\d+)(\\W|$)";
        String replaced = source.replaceAll(pattern1, "$1A$3");
        replaced = replaced.replaceAll(pattern2, "$1B$3");
        System.out.println(replaced);



А как это записать одним выражением, чтобы все замены произошли в одном цикле?
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774508
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oson,

Код: java
1.
"my string %1 and &2".replaceAll("(?<=%)\\d+", "A").replaceAll("(?<=&)\\d+", "B");
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774515
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, так в этом случае строку все равно будет пробегать движок regex столько раз, сколько раз я запишу replaceAll.
Это просто удобная запись того же самого.
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774524
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oson,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Pattern p = Pattern.compile("(?<=[%&#])(\\d+)");
Matcher m = p.matcher("my string %1 and &2 and #3");
StringBuffer sb = new StringBuffer();
if (m.find()) {
	m.appendReplacement(sb, "A");
}
if (m.find()) {
	m.appendReplacement(sb, "B");
}
if (m.find()) {
	m.appendReplacement(sb, "C");
}
m.appendTail(sb);
System.out.println(sb.toString());
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774528
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,
как это работает?

Не совсем понял выражение (?<=[%])
Потом видимо

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
if (m.find()) {
	m.appendReplacement(sb, "A");
}
if (m.find()) {
	m.appendReplacement(sb, "B");
}
if (m.find()) {
	m.appendReplacement(sb, "C");
}



имеется ввиду, что первый m.find() всегда случится для первого символа в [%], то есть %,
Второй - для второго, то есть &, третий соответсвенно для третьего - #
Так как то?
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774530
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
osonимеется ввиду, что первый m.find() всегда случится для первого символа в [%], то есть %,
Второй - для второго, то есть &, третий соответсвенно для третьего - #Все правильно.
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774607
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
System.out.printf("my string %s and %s\n","$1A$3","$1B$3");
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774633
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,
спасибо. Но если в строке не будет например первого occurence, то форматирует неправильно. А строка каждая скорее всего трех случаев не будет иметь одновременно.
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38774681
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oson,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Pattern p = Pattern.compile("([#&%])\\d+");
Matcher m = p.matcher("my string %1 and &2 and #3");
StringBuffer sb = new StringBuffer();
while (m.find()) {
	String r;
	switch (m.group(1)) {
	case "%": r = "A"; break;
	case "&": r = "B"; break;
	case "#": r = "C"; break;
	default: r = "(default)";
	}
	m.appendReplacement(sb, m.group(1) + r);
}
m.appendTail(sb);
System.out.println(sb.toString());
...
Рейтинг: 0 / 0
Несколько условий в одном регулярном выражении
    #38776767
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Несколько условий в одном регулярном выражении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]