В scala.util.matching. Черта Regex MatchData, я вижу, что там поддерживают для groupnames, я думал, что это было связано с (Regex Под названием Группы фиксации)
Но так как Java не поддерживает groupnames до версии 7 насколько я понимаю (касательно), версия 2.8.0 Scala (Java HotSpot(TM) 64-Bit Server VM, Java 1.6. дает мне это исключение:
scala> val pattern = """(?\w+) (?\d+)""".r
java.util.regex.PatternSyntaxException: Look-behind group does not have an obvio
us maximum length near index 11
(?\w+) (?\d+)
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.group0(Pattern.java:2488)
at java.util.regex.Pattern.sequence(Pattern.java:1806)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
Таким образом, вопросом является Named Capturing Groups, поддерживаемая в Scala? Раз так какие-либо примеры там?
Боюсь, что именованные группы Scala определены иначе. Это не что иное, как псевдоним постобработки для безымянных (то есть просто пронумерованных) групп в исходном шаблоне.
Вот пример:
import scala.util.matching.Regex
object Main {
def main(args: Array[String]) {
val pattern = new Regex("""(\w*) (\w*)""", "firstName", "lastName");
val result = pattern.findFirstMatchIn("James Bond").get;
println(result.group("lastName") + ", " + result.group("firstName"));
}
}
Это печатает (, как видно на ideone.com ):
Bond, James
Здесь происходит то, что в конструкторе для Regex
мы предоставляем псевдонимы для группы 1, 2 и т. д. Затем мы можем ссылаться на эти группы по этим именам. Эти имена не являются неотъемлемой частью самих паттернов.
В Scala нет собственной реализации сопоставления регулярных выражений. Вместо этого базовые регулярные выражения принадлежат Java, поэтому детали написания шаблонов описаны в java.util.regex.Pattern.
Там вы обнаружите, что используемый вами синтаксис на самом деле является синтаксисом ограничения просмотра назад, хотя, согласно документам, за <
должно следовать либо =
( положительный взгляд назад) или !
(отрицательный взгляд назад).