Регулярные выражения в Java. Именование групп захвата
March 15th, 2010
Quick link: http://oe.lv/971
Работаю Я тут над одним парсером, понадобилось работать с группами захвата в регулярных выражениях. Думал, что в Java есть что-то похожее на лейблы для групп… Почти угадал. Есть, но только в JDK7, который на 4 марта имеет статус “новинка b85″. В двух словах, что такое именованые группы захвата:
- (?<NAME>X) to define a named group “NAME”
- \k to backref a named group “NAME”
- <$<NAME> to reference to captured group in matcher’s replacement str
- group(String NAME) to return the captured input subsequence by the given “named group”
Код примера:
String s = "0x(?<bytes>\\p{XDigit}{1,4})\\s++u\\+(?<char>\\p{XDigit}{4})(?:\\s++)?"; Matcher m = Pattern.compile(s).matcher(INPUTTEXT); if (m.matches()) { int bs = Integer.valueOf(m.group("bytes"), 16); int c = Integer.valueOf(m.group("char"), 16); System.out.printf("[%x] -> [%04x]%n", bs, c); } /* или */ System.out.println("0x1234 u+5678".replaceFirst(s, "u+$<char> 0x$<bytes>"));
Взято у blogs.sun.com
Leave a comment
| Trackback
