все вопросы по Java которые задают более 3х раз на форуме
RegExp сладости из Java7
Запись от mutagen размещена 01.09.2013 в 17:15
Обновил(-а) mutagen 01.09.2013 в 17:16
Java | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| package rexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author mutagen
*/
public class RexpNamedGroup {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Допустим надо поискать повторяющиеся последовательности из 3 цифр и 2 букв а или b так,
// чтобы они полностью совпадали
// сам рексп будет \\d{3}[ab]{2} - и мы его хотим расширить для поиска повторов
// что то типа \\d{3}[ab]{2}[пробел]\\d{3}[ab]{2}
// для этого воспользуемся именованной группой и бекреференсом на неё \\k<mydigits1>
Pattern digits = Pattern.compile("(?<mydigits1>\\d{3}[ab]{2})\\s+\\k<mydigits1>");
// допустим у нас есть кандидаты на проверку
String[] targets = {"123ab 123ab", "123aa 123aa", "123bb 123bb", "123aa 123bb", "123bb 123aa"};
for (String tgt : targets) {
Matcher matcher = digits.matcher(tgt);
if (matcher.matches()) {
// смотрим на результат
System.out.println(matcher.group("mydigits1"));
}
}
}
} |
|
Bash | 1
2
3
4
5
| run:
123ab
123aa
123bb
BUILD SUCCESSFUL (total time: 0 seconds) |
|
итак мы получили что хотели
из минусов - нельзя делать именованные группы на русском(скорее всего и любом другом неанглийском) языке, что малёха ломает модель Java по поводу того что имена пропертей могут быть на любых языках, а именованных групп только на английском, без пробелов и подчеркух |
Всего комментариев