Регулярные выражения в 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

No comments yet.

TOP