Spec-Zone.ru › Scala 2.13 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)

Чтобы проверить, соответствует ли входное значение регулярному выражению:

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

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

Линейные надтипы
java.io.Serializable, AnyRef, Any
Известные подклассы
UnanchoredRegex

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

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

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

Атрибуты
protected[java.lang]
Definition Classes
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()
Примечание

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

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 и нелокальными возвратами и исключениями, зависят от платформы.

Атрибуты
protected[java.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

Текст для сравнения.

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

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

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

def matches(source: CharSequence): Boolean

Возвращает, соответствует ли это Regex заданной последовательности символов.

Как и у экстрактного метода, этот метод учитывает привязку.

source

Текст для сравнения

returns

true тогда и только тогда, когда source соответствует этому Regex.

Пример:
    """\d+""".r matches "123" // returns true
See also

Regex#unanchored

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

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

Example:
    """\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

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

Definition Classes
Regex → AnyRef → Any

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

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException]) @native()

© 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

Spec-Zone.ru

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