Класс scala.util.matching.Regex
Компаньон объект Regex
класс Regex extends Serializable
Конструкторы экземпляров
новый Regex(regex: String, groupNames: String*)
Скомпилировать регулярное выражение, предоставленное как строка, в шаблон, который можно сопоставить с входными данными.
Если предоставлены имена групп, они могут быть использованы следующим образом:
val namedDate = new Regex("""(\d\d\d\d)-(\d\d)-(\d\d)""", "year", "month", "day")
val namedYears = for (m <- namedDate findAllMatchIn dates) yield m group "year"
Имена групп, предоставленные в конструкторе, предпочтительнее встроенных имен групп при получении совпадающих групп по имени. Не все платформы поддерживают встроенные имена.
Этот конструктор не поддерживает параметры как флаги, которые должны быть предоставлены как встроенные флаги в строке шаблона: (?idmsux-idmsux).
- regex
Регулярное выражение для компиляции.
- groupNames
Имена групп захвата.
Члены-значения
final def !=(arg0: Any): Boolean
Проверка двух объектов на неравенство.
- returns
trueесли !(this == that), в противном случае false.
- Definition Classes
- AnyRef → Any
final def ##(): Int
Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для чисел он возвращает хеш-значение, согласованное с равенством значений: если два экземпляра типов значений сравниваются как true, то ## будет генерировать одинаковое хеш-значение для каждого из них. Для null возвращает хеш-код, где null.hashCode выбрасывает NullPointerException.
- returns
хеш-значение, согласованное с ==
- Definition Classes
- AnyRef → Any
def +(other: String): String
- Неявный
- Этот член добавлен неявным преобразованием из Regex вany2stringadd[Regex] выполненное методом any2stringadd в scala.Predef.
- Definition Classes
- any2stringadd
def ->[B](y: B): (Regex, B)
- Неявный
- Этот член добавлен неявным преобразованием из Regex вArrowAssoc[Regex] выполненное методом ArrowAssoc в scala.Predef.
- Definition Classes
- ArrowAssoc
- Аннотации
- @inline()
final def ==(arg0: Any): Boolean
Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).
- returns
trueесли объект-получатель эквивалентен аргументу;falseв противном случае.
- Definition Classes
- AnyRef → Any
def anchored: Regex
final def asInstanceOf[T0]: T0
Приведение объекта-получателя к типу T0.
Обратите внимание, что успех приведения во время выполнения зависит от правил стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, а выражение List(1).asInstanceOf[List[String]] — нет. В последнем примере, так как аргумент типа стирается во время компиляции, проверить, содержат ли элементы списка требуемый тип, невозможно.
- returns
объект-получатель.
- Definition Classes
- Any
- Исключения
ClassCastException, если объект-получатель не является экземпляром стираемого типаT0.
def clone(): AnyRef
Создает копию объекта-получателя.
По умолчанию реализация метода clone зависит от платформы.
- returns
копию объекта-получателя.
def ensuring(cond: (Regex) => Boolean, msg: => Any): Regex
- Неявный
- Этот член добавлен неявным преобразованием из Regex вEnsuring[Regex] выполненное методом Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: (Regex) => Boolean): Regex
- Неявный
- Этот член добавлен неявным преобразованием из Regex вEnsuring[Regex] выполненное методом Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean, msg: => Any): Regex
- Неявный
- Этот член добавлен неявным преобразованием из Regex в Ensuring[Regex] с помощью метода Ensuring в scala.Predef.
- Классы-определения
- Ensuring
def ensuring(cond: Boolean): Regex
- Неявный
- Этот член добавлен неявным преобразованием из Regex в Ensuring[Regex] с помощью метода Ensuring в scala.Predef.
- Классы-определения
- Ensuring
final def eq(arg0: AnyRef): Boolean
Проверяет, является ли аргумент (that) ссылкой на объект-получатель (this).
Метод eq реализует отношение эквивалентности на не-null экземплярах AnyRef, и имеет три дополнительных свойства:
-
Он согласован: для любых не-null экземпляров
x и y типа AnyRef, несколько вызовов x.eq(y) последовательно возвращают true или последовательно возвращают false. Для любого не-null экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращают false.
null.eq(null) возвращает true.
При переопределении методов equals или hashCode важно обеспечить, чтобы их поведение соответствовало равенству ссылок. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и должны хешироваться к одному значению (o1.hashCode == o2.hashCode).
- возвращает
trueесли аргумент является ссылкой на объект-получатель;falseв противном случае.
- Классы-определения
- AnyRef
def equals(arg0: AnyRef): Boolean
Метод равенства для ссылочных типов. Реализация по умолчанию делегирует в eq.
См. также equals в scala.Any.
- возвращает
trueесли объект-получатель эквивалентен аргументу;falseв противном случае.
- Классы-определения
- AnyRef → Any
def finalize(): Unit
Вызывается сборщиком мусора для объекта-получателя, когда к объекту больше нет ссылок.
Подробности о том, когда и будет ли вызываться метод finalize, а также взаимодействие между finalize и нелокальными возвратами и исключениями, зависят от платформы.
def findAllIn(source: CharSequence): MatchIterator
Возвращает все неперекрывающиеся совпадения этого Regex в заданной последовательности символов в виде scala.util.matching.Regex.MatchIterator, который является специальным scala.collection.Iterator, возвращающим совпавшие строки, но также может быть запрошен для получения дополнительных данных о последнем совпадении, таких как группы захвата и начальная позиция.
Регулярное выражение MatchIterator также может быть преобразовано в итератор, возвращающий объекты типа scala.util.matching.Regex.Match, как обычно возвращается findAllMatchIn.
В случае потенциальных перекрывающихся совпадений возвращается первое возможное совпадение, за которым следует следующее совпадение, которое следует за входом, потребленным первым совпадением:
val hat = "hat[^a]+".r val hathaway = "hathatthattthatttt" val hats = hat.findAllIn(hathaway).toList // List(hath, hattth) val pos = hat.findAllMatchIn(hathaway).map(_.start).toList // List(0, 7)
Для возврата перекрывающихся совпадений можно сформулировать регулярное выражение с предпроверкой (?=) которое не потребляет область перекрытия.
val madhatter = "(h)(?=(at[^a]+))".r
val madhats = madhatter.findAllMatchIn(hathaway).map {
case madhatter(x,y) => s"$x$y"
}.toList // List(hath, hatth, hattth, hatttt)
Попытка извлечь информацию о совпадении после исчерпания итератора приведет к java.lang.IllegalStateException. См. scala.util.matching.Regex.MatchIterator для получения подробностей.
- source
Текст для поиска совпадений.
- возвращает
scala.util.matching.Regex.MatchIterator совпадающих подстрок.
for (words <- """\w+""".r findAllIn "A simple example.") yield words
def findAllMatchIn(source: CharSequence): Iterator[Match]
Возвращает все неперекрывающиеся совпадения этого регулярного выражения в заданной последовательности символов как scala.collection.Iterator объектов scala.util.matching.Regex.Match.
- source
Текст для поиска совпадений.
- возвращает
scala.collection.Iterator объектов scala.util.matching.Regex.Match для всех совпадений.
for (words <- """\w+""".r findAllMatchIn "A simple example.") yield words.start
def findFirstIn(source: CharSequence): Option[String]
Возвращает необязательную первую совпадающую строку этого Regex в заданной последовательности символов или None, если совпадений нет.
- source
Текст для сравнения.
- returns
A scala.Option первой совпадающей строки в тексте.
"""\w+""".r findFirstIn "A simple example." foreach println // prints "A"
def findFirstMatchIn(source: CharSequence): Option[Match]
Возвращает необязательное первое соответствие этого Regex в заданной последовательности символов или None, если его нет.
Если соответствие найдено, scala.util.matching.Regex.Match можно использовать для получения дополнительной информации.
- source
Текст для сравнения.
- returns
A scala.Option of scala.util.matching.Regex.Match первой совпадающей строки в тексте.
("""[a-z]""".r findFirstMatchIn "A simple example.") map (_.start) // returns Some(2), the index of the first match in the text
def findPrefixMatchOf(source: CharSequence): Option[Match]
Возвращает необязательное совпадение этого Regex в начале заданной последовательности символов или None, если оно не соответствует никакому префиксу последовательности символов.
В отличие от findFirstMatchIn, этот метод вернёт совпадение только в начале входных данных.
- source
Текст для сравнения.
- returns
A scala.Option of scala.util.matching.Regex.Match совпавшей строки.
"""\w+""".r findPrefixMatchOf "A simple example." map (_.after) // returns Some(" simple example.")
def findPrefixOf(source: CharSequence): Option[String]
Возвращает необязательное совпадение этого Regex в начале заданной последовательности символов или None, если оно не соответствует никакому префиксу последовательности символов.
В отличие от findFirstIn, этот метод вернёт совпадение только в начале входных данных.
- source
Текст для сравнения.
- returns
A scala.Option совпавшего префикса.
"""\p{Lower}""".r findPrefixOf "A simple example." // returns None, since the text does not begin with a lowercase letter
def formatted(fmtstr: String): String
Возвращает отформатированную строку в соответствии с заданной format строкой. Форматные строки аналогичны String.format (@see java.lang.String.format).
- Неявный
- Этот член добавляется неявным преобразованием из Regex в StringFormat[Regex] с помощью метода StringFormat в scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
final def getClass(): Class[_ <: AnyRef]
Возвращает представление класса объекта во время выполнения.
- returns
объект класса, соответствующий типу получателя во время выполнения.
def hashCode(): Int
Метод hashCode для ссылочных типов. См. hashCode в scala.Any.
- returns
значение хэш-кода для этого объекта.
final def isInstanceOf[T0]: Boolean
Проверяет, является ли динамический тип объекта-получателя T0.
Обратите внимание, что результат проверки модулирован семантикой стирания Scala. Следовательно, выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, так как аргумент типа стирается во время компиляции, проверить, относятся ли содержимое списка к указанному типу, невозможно.
- returns
trueесли объект-получатель является экземпляром стираемого типаT0;falseв противном случае.
- Definition Classes
- Any
def matches(source: CharSequence): Boolean
Возвращает, соответствует ли это Regex заданной последовательности символов.
Как и у экстрактного метода, этот метод учитывает привязку.
- source
Текст для сравнения
- returns
true тогда и только тогда, когда
sourceсоответствует этомуRegex.
- See also
"""\d+""".r matches "123" // returns true
final def ne(arg0: AnyRef): Boolean
Эквивалент !(this eq that).
- returns
trueесли аргумент не является ссылкой на принимающий объект;falseв противном случае.
- Definition Classes
- AnyRef
final def notify(): Unit
Будит один поток, ожидающий на мониторе принимающего объекта.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Note
not specified by SLS as a member of AnyRef
final def notifyAll(): Unit
Будит все потоки, ожидающие на мониторе принимающего объекта.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Note
not specified by SLS as a member of AnyRef
val pattern: Pattern
def regex: String
def replaceAllIn(target: CharSequence, replacer: (Match) => String): String
Заменяет все совпадения, используя функцию замены. Функция замены принимает scala.util.matching.Regex.Match, чтобы можно было получить дополнительную информацию из совпадения. Например:
import scala.util.matching.Regex
val datePattern = new Regex("""(\d\d\d\d)-(\d\d)-(\d\d)""", "year", "month", "day")
val text = "From 2011-07-15 to 2011-07-17"
val repl = datePattern replaceAllIn (text, m => s"${m group "month"}/${m group "day"}")
В строке замены знак доллара ($) со следующим за ним числом будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 обозначает всё совпадение. Любой другой символ является ошибкой. Обратный слэш (\) будет интерпретироваться как escape-символ и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.
- target
Строка для поиска совпадений.
- replacer
Функция, которая отображает совпадение в другую строку.
- returns
Целевая строка после замен.
def replaceAllIn(target: CharSequence, replacement: String): String
Заменяет все совпадения на строку.
В строке замены знак доллара ($) со следующим за ним числом будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 обозначает всё совпадение. Любой другой символ является ошибкой. Обратный слэш (\) будет интерпретироваться как escape-символ и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.
- target
Строка для поиска совпадений
- replacement
Строка, которая будет заменять каждое совпадение
- returns
Результирующая строка
"""\d+""".r replaceAllIn ("July 15", "<NUMBER>") // returns "July <NUMBER>"
def replaceFirstIn(target: CharSequence, replacement: String): String
Заменяет первое совпадение на строку.
В строке замены знак доллара ($) со следующим за ним числом будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 обозначает всё совпадение. Любой другой символ является ошибкой. Обратный слэш (\) будет интерпретироваться как escape-символ и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.
- target
Строка для поиска совпадений
- replacement
Строка, которая будет заменять совпадение
- returns
Результирующая строка
def replaceSomeIn(target: CharSequence, replacer: (Match) => Option[String]): String
Заменяет некоторые из совпадений, используя функцию замены, которая возвращает scala.Option. Функция замены принимает scala.util.matching.Regex.Match, чтобы можно было получить дополнительную информацию из совпадения. Например:
import scala.util.matching.Regex._
val vars = Map("x" -> "a var", "y" -> """some $ and \ signs""")
val text = "A text with variables %x, %y and %z."
val varPattern = """%(\w+)""".r
val mapper = (m: Match) => vars get (m group 1) map (quoteReplacement(_))
val repl = varPattern replaceSomeIn (text, mapper)
В строке замены знак доллара ($) со следующим за ним числом будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 обозначает всё совпадение. Любой другой символ является ошибкой. Обратный слэш (\) будет интерпретироваться как escape-символ и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.
- target
Строка для поиска совпадений.
- replacer
Функция, которая необязательно отображает совпадение в другую строку.
- returns
Целевая строка после замен.
def runMatcher(m: Matcher): Boolean
- Attributes
- protected
def split(toSplit: CharSequence): Array[String]
Разделяет предоставленную последовательность символов вокруг совпадений этого регулярного выражения.
- toSplit
Последовательность символов для разделения
- returns
Массив строк, вычисленный путем разделения входных данных вокруг совпадений этого регулярного выражения
final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
def toString(): String
Строка, определяющая регулярное выражение
- returns
Строковое представление объекта.
def unanchored: UnanchoredRegex
Создает новый Regex с тем же шаблоном, но без требования, чтобы весь String соответствовал шаблону в шаблонах извлекателей и Regex#matches.
Обычно сопоставление с date ведет себя так, как будто шаблон заключен в якоря, "^pattern$".
Неякорь Regex ведет себя так, как будто эти якоря были удалены.
Обратите внимание, что этот метод фактически не удаляет никаких сопоставителей из шаблона.
Вызов anchored возвращает исходный Regex.
val date = """(\d\d\d\d)-(\d\d)-(\d\d)""".r.unanchored
val date(year, month, day) = "Date 2011-07-15" // OK
val copyright: String = "Date of this document: 2011-07-15" match {
case date(year, month, day) => s"Copyright $year" // OK
case _ => "No copyright"
}
- returns
Новый неявкорённый regex
def unapplySeq(m: Match): Option[List[String]]
Попытка сопоставить с scala.util.matching.Regex.Match.
Ранее неудачное сопоставление приводит к None.
Если произошло успешное сопоставление с текущим шаблоном, то этот результат используется.
В противном случае этот Regex применяется к ранее сопоставленному вводу, и результат этого сопоставления используется.
def unapplySeq(c: Char): Option[List[Char]]
Попытка сопоставить строковое представление scala.Char.
Если сопоставление успешно, результатом является первая совпадающая группа, если группы определены, или пустая последовательность в противном случае.
Например:
val cat = "cat"
// the case must consume the group to match
val r = """(\p{Lower})""".r
cat(0) match { case r(x) => true }
cat(0) match { case r(_) => true }
cat(0) match { case r(_*) => true }
cat(0) match { case r() => true } // no match
// there is no group to extract
val r = """\p{Lower}""".r
cat(0) match { case r(x) => true } // no match
cat(0) match { case r(_) => true } // no match
cat(0) match { case r(_*) => true } // matches
cat(0) match { case r() => true } // matches
// even if there are multiple groups, only one is returned
val r = """((.))""".r
cat(0) match { case r(_) => true } // matches
cat(0) match { case r(_,_) => true } // no match
- c
Сопоставляемый символ
- returns
Сопоставление
def unapplySeq(s: CharSequence): Option[List[String]]
Попытка сопоставить java.lang.CharSequence.
Если сопоставление успешно, результатом является список сопоставленных групп (или элемент null, если группа не соответствует ни одному входному значению). Если шаблон не определяет групп, то результатом при успешном сопоставлении будет пустой список.
Этот метод по умолчанию пытается сопоставить весь ввод; чтобы найти следующую совпадающую подпоследовательность, используйте неявкорённый Regex.
Например:
val p1 = "ab*c".r
val p1Matches = "abbbc" match {
case p1() => true // no groups
case _ => false
}
val p2 = "a(b*)c".r
val p2Matches = "abbbc" match {
case p2(_*) => true // any groups
case _ => false
}
val numberOfB = "abbbc" match {
case p2(b) => Some(b.length) // one group
case _ => None
}
val p3 = "b*".r.unanchored
val p3Matches = "abbbc" match {
case p3() => true // find the b's
case _ => false
}
val p4 = "a(b*)(c+)".r
val p4Matches = "abbbcc" match {
case p4(_*) => true // multiple groups
case _ => false
}
val allGroups = "abbbcc" match {
case p4(all @ _*) => all mkString "/" // "bbb/cc"
case _ => ""
}
val cGroup = "abbbcc" match {
case p4(_, c) => c
case _ => ""
}
- s
Сопоставляемая строка
- returns
Сопоставления
final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/util/matching/Regex.html
Регулярное выражение используется для определения соответствия строки шаблону и, если оно соответствует, для извлечения или преобразования соответствующих частей.
Использование
Этот класс делегирует пакету java.util.regex платформы Java. См. документацию для java.util.regex.Pattern для получения подробностей о синтаксисе регулярных выражений для строк шаблонов.
Экземпляр
Regexпредставляет собой скомпилированный шаблон регулярного выражения. Поскольку компиляция является дорогостоящей операцией, часто используемыеRegexшаблоны должны создаваться один раз, вне циклов и, возможно, в компаньон-объекте.Канонический способ создания
Regex— использование методаr, неявно предоставляемого для строк:val date = raw"(\d{4})-(\d{2})-(\d{2})".rПоскольку экранирование не обрабатывается в многострочных строковых литералах, использование тройных кавычек позволяет избежать экранирования символа обратного слэша, так что
"\\d"можно записать как"""\d""". Тот же результат достигается с помощью определенных интерполяторов, таких какraw"\d".rили пользовательский интерполяторr"\d", который также компилируетRegex.Извлечение
Чтобы извлечь группы захвата при совпадении с
Regex, используйте его как извлекатель в совпадении шаблонов:"2004-01-20" match { case date(year, month, day) => s"$year was a good year for PLs." }Чтобы проверить только соответствие
Regex, игнорируя любые группы, используйте символ дикого совпадения последовательности:"2004-01-20" match { case date(_*) => "It's a date!" }Это работает, потому что извлекатель
Regexгенерирует последовательность строк. Извлечение только года из даты также можно выразить с помощью символа дикого совпадения последовательности:"2004-01-20" match { case date(year, _*) => s"$year was a good year for PLs." }В совпадении шаблонов
Regexобычно соответствует всему входному значению. Однако неявноеRegexнаходит шаблон в любом месте входного значения.val embeddedDate = date.unanchored "Date: 2004-01-20 17:25:18 GMT (10 years, 28 weeks, 5 days, 17 hours and 51 minutes ago)" match { case embeddedDate("2004", "01", "20") => "A Scala is born." }Поиск совпадений
Чтобы найти или заменить совпадения шаблона, используйте различные методы поиска и замены. Для каждого метода существует версия для работы со строками совпадения и другая для работы с объектами
Match.Например, сопоставление шаблонов с неявным
Regex, как в предыдущем примере, также можно выполнить с помощьюfindFirstMatchIn. МетодыfindFirstвозвращаютOption, который не пуст, если совпадение найдено, илиNoneв случае отсутствия совпадения:val dates = "Important dates in history: 2004-01-20, 1958-09-05, 2010-10-06, 2011-07-15" val firstDate = date.findFirstIn(dates).getOrElse("No date found.") val firstYear = for (m <- date.findFirstMatchIn(dates)) yield m.group(1)Чтобы найти все совпадения:
Чтобы проверить, соответствует ли входное значение регулярному выражению:
date.matches("2018-03-01") // true date.matches("Today is 2018-03-01") // false date.unanchored.matches("Today is 2018-03-01") // trueЧтобы итерировать по совпадающим строкам, используйте
findAllIn, который возвращает специальный итератор, который можно запросить дляMatchDataпоследнего совпадения:val mi = date.findAllIn(dates) while (mi.hasNext) { val d = mi.next if (mi.group(1).toInt < 1960) println(s"$d: An oldie but goodie.") }Хотя
MatchIteratorвозвращаемоеfindAllInиспользуется как любойIterator, с чередующими вызовамиhasNextиnext,hasNextимеет дополнительный побочный эффект продвижения базового соответчика к следующему неиспользованному совпадению. Этот эффект виден вMatchDataпредставляющем «текущее совпадение».Пример показывает, что методы на
MatchDataтакие какstartперейдут к первому совпадению, если необходимо. Он также показывает, чтоhasNextперейдет к следующему неиспользованному совпадению, еслиnextуже вернул текущее совпадение.Текущее
MatchDataможно получить с помощью методаmatchData. В качестве альтернативы,findAllMatchInвозвращаетIterator[Match], где нет взаимодействия между итератором и объектамиMatchкоторые он уже произвел.Обратите внимание, что
findAllInнаходит совпадения, которые не перекрываются. (См. findAllIn для получения дополнительных примеров.)val num = raw"(\d+)".r val all = num.findAllIn("123").toList // List("123"), not List("123", "23", "3")Замена текста
Замена текста может выполняться безусловно или в зависимости от текущего совпадения:
val redacted = date.replaceAllIn(dates, "XXXX-XX-XX") val yearsOnly = date.replaceAllIn(dates, m => m.group(1)) val months = (0 to 11).map { i => val c = Calendar.getInstance; c.set(2014, i, 1); f"$c%tb" } val reformatted = date.replaceAllIn(dates, _ match { case date(y,m,d) => f"${months(m.toInt - 1)} $d, $y" })Сопоставление шаблона
MatchсRegexсоздавшим его, не повторно применяетRegex. В выражении дляreformattedкаждое совпадениеdateвычисляется один раз. Но можно применитьRegexкMatchполученному из другого шаблона:val docSpree = """2011(?:-\d{2}){2}""".r val docView = date.replaceAllIn(dates, _ match { case docSpree() => "Historic doc spree!" case _ => "Something else happened" })java.util.regex.Pattern