Spec-Zone.ru › Scala 2.12 Library

Класс scala.util.matching.Regex

Компонент объект Regex

класс Regex extends Serializable

Регулярное выражение используется для определения, соответствует ли строка шаблону, и, если соответствует, для извлечения или преобразования совпадающих частей.

Использование

Этот класс делегирует пакету 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)

Чтобы найти все совпадения:

val allYears = for (m <- date.findAllMatchIn(dates)) yield m.group(1)

Чтобы пройтись по совпадающим строкам, используйте 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 , представляющем «текущее совпадение».

val r = "(ab+c)".r
val s = "xxxabcyyyabbczzz"
r.findAllIn(s).start    // 3
val mi = r.findAllIn(s)
mi.hasNext              // true
mi.start                // 3
mi.next()               // "abc"
mi.start                // 3
mi.hasNext              // true
mi.start                // 9
mi.next()               // "abbc"

Пример показывает, что методы 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"
})
Тип-«Я сам»
Regex
Аннотации
@SerialVersionUID()
Источник
Regex.scala
См. также

java.util.regex.Pattern

Линейные супертипы
Известные подклассы

Конструкторы экземпляров

новый 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

Проверка двух объектов на неравенство.

возвращает

true если !(this == that), иначе false.

Определяющие классы
AnyRef → Any

final def ##(): Int

Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для чисел он возвращает значение хеша, согласованное с равенством значений: если два экземпляра типа значения сравниваются как true, то ## для каждого из них вернёт одно и то же значение хеша. Для null возвращает хешкод, где null.hashCode выбрасывает NullPointerException.

возвращает

значение хеша, согласованное с ==

Определяющие классы
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен неявным преобразованием из Regex в any2stringadd[Regex] с помощью метода any2stringadd в scala.Predef.
Определяющие классы
any2stringadd

def ->[B](y: B): (Regex, B)

Неявный
Этот член добавлен неявным преобразованием из Regex в ArrowAssoc[Regex] с помощью метода ArrowAssoc в scala.Predef.
Определяющие классы
ArrowAssoc
Аннотации
@inline()

final def ==(arg0: Any): Boolean

Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).

возвращает

true если объект-получатель эквивалентен аргументу; false в противном случае.

Определяющие классы
AnyRef → Any

def anchored: Regex

final def asInstanceOf[T0]: T0

Привести объект-получатель к типу T0.

Обратите внимание, что успешность приведения в рантайме зависит от семантики стирания Scala. Таким образом, выражение 1.asInstanceOf[String] выбросит ClassCastException в рантайме, в то время как выражение List(1).asInstanceOf[List[String]] не выбросит. В последнем примере, поскольку тип аргумента стёрся во время компиляции, невозможно проверить, соответствуют ли содержимое списка требуемому типу.

возвращает

объект-получатель.

Определяющие классы
Any
Исключения

ClassCastException если объект-получатель не является экземпляром стирания типа T0.

def clone(): AnyRef

Создать копию объекта-получателя.

Стандартная реализация метода clone зависит от платформы.

возвращает

копию объекта-получателя.

Атрибуты
protected[lang]
Определяющие классы
AnyRef
Аннотации
@throws( ... ) @native()
Примечание

не определён SLS как член AnyRef

def ensuring(cond: (Regex) ⇒ Boolean, msg: ⇒ Any): Regex

Неявный
Этот член добавлен неявным преобразованием из Regex в Ensuring[Regex] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: (Regex) ⇒ Boolean): Regex

Неявный
Этот член добавлен неявным преобразованием из Regex в Ensuring[Regex] с помощью метода Ensuring в scala.Predef.
Определяющие классы
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 реализует отношение эквивалентности на непустых экземплярах AnyRef, и обладает тремя дополнительными свойствами:

    Он согласован: для любых непустых экземпляров x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false.Для любого непустого экземпляра 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: Any): Boolean

Метод равенства для ссылочных типов. Реализация по умолчанию делегирует вызов eq.

См. также equals в scala.Any.

возвращает

true если объект-получатель эквивалентен аргументу; false в противном случае.

Классы определений
AnyRef → Any

def finalize(): Unit

Вызывается сборщиком мусора для объекта-получателя, когда больше нет ссылок на объект.

Подробности о том, когда и как вызывается метод finalize, а также взаимодействие между finalize и нелокальными возвратами и исключениями, зависят от платформы.

Атрибуты
protected[lang]
Классы определений
AnyRef
Аннотации
@throws( classOf[java.lang.Throwable] )
Примечание

не определено SLS как член AnyRef

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

Текст для поиска совпадений.

возвращает

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

Текст для поиска совпадений.

возвращает

scala.Option 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 результата совпадения 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[_]

Возвращает представление класса объекта во время выполнения.

returns

объект класса, соответствующий типу получателя во время выполнения.

Definition Classes
AnyRef → Any
Annotations
@native()

def hashCode(): Int

Метод hashCode для ссылочных типов. См. hashCode в scala.Any.

returns

значение хэш-кода для данного объекта.

Definition Classes
AnyRef → Any
Annotations
@native()

final def isInstanceOf[T0]: Boolean

Проверяет, соответствует ли динамический тип объекта получателя типу T0.

Обратите внимание, что результат проверки зависит от стирания типов в Scala. Следовательно, выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, из-за стирания типа в процессе компиляции, невозможно проверить, относятся ли элементы списка к указанному типу.

returns

true, если объект получателя является экземпляром стёртого типа T0; false в противном случае.

Definition Classes
Any

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

не указано SLS как член AnyRef

final def notifyAll(): Unit

Разбуживает все потоки, ожидающие на мониторе объекта-получателя.

Definition Classes
AnyRef
Annotations
@native()
Note

не указано SLS как член AnyRef

val pattern: Pattern

def regex: String

def replaceAllIn(target: CharSequence, replacer: (Match) ⇒ String): String

Заменяет все совпадения с помощью функции замены. Функция replacer принимает 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 — всему совпадению. Любой другой символ является ошибкой. Символ обратного слэша (\) будет интерпретироваться как символ экранирования и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.

target

Строка для поиска совпадения.

replacer

Функция, которая сопоставляет совпадение с другой строкой.

returns

Строка target после замен.

def replaceAllIn(target: CharSequence, replacement: String): String

Заменяет все совпадения строкой.

В строке replacement знак доллара ($) за которым следует число будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 — всему совпадению. Любой другой символ является ошибкой. Знак обратного слэша (\) интерпретируется как символ экранирования и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.

target

Строка для сопоставления

replacement

Строка, которая будет заменять каждое совпадение

returns

Результат строки

Пример:
    """\d+""".r replaceAllIn ("July 15", "<NUMBER>") // returns "July <NUMBER>"

def replaceFirstIn(target: CharSequence, replacement: String): String

Заменяет первое совпадение строкой.

В строке replacement знак доллара ($) за которым следует число будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 — всему совпадению. Любой другой символ является ошибкой. Знак обратного слэша (\) интерпретируется как символ экранирования и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.

target

Строка для сопоставления

replacement

Строка, которая заменит совпадение

returns

Результат строки

def replaceSomeIn(target: CharSequence, replacer: (Match) ⇒ Option[String]): String

Заменяет некоторые совпадения с использованием функции replacer, которая возвращает scala.Option. Функция replacer принимает 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)

В строке replacement знак доллара ($) за которым следует число будет интерпретироваться как ссылка на группу в сопоставленном шаблоне, при этом числа от 1 до 9 соответствуют первым девяти группам, а 0 — всему совпадению. Любой другой символ является ошибкой. Знак обратного слэша (\) интерпретируется как символ экранирования и может использоваться для экранирования знака доллара. Используйте Regex.quoteReplacement для экранирования этих символов.

target

Строка для сопоставления.

replacer

Функция, которая необязательно отображает совпадение на другую строку.

returns

Строка target после замен.

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

Строковое представление объекта.

Definition Classes
Regex → AnyRef → Any

def unanchored: UnanchoredRegex

Создает новый Regex с тем же шаблоном, но без требования, что вся строка должна совпадать в шаблонах экстрактора.

Обычно сопоставление с 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( ... )

final def wait(arg0: Long, arg1: Int): Unit

Definition Classes
AnyRef
Annotations
@throws( ... )

final def wait(arg0: Long): Unit

Definition Classes
AnyRef
Annotations
@throws( ... ) @native()

def →[B](y: B): (Regex, B)

Неявный
Этот член добавлен благодаря неявной конвертации из Regex в ArrowAssoc[Regex] с помощью метода ArrowAssoc в scala.Predef.
Definition Classes
ArrowAssoc

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala/util/matching/Regex.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API