English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala использует scala.util.matching для поддержки регулярных выражений. Regex класс для поддержки регулярных выражений. Ниже приведен пример использования регулярных выражений для поиска слов Scala :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = "Scala".r val str = "Scala is Scalable and cool" println(pattern findFirstIn str) } }
Выполните приведенный код, и результат вывода будет:
$ scalac Test.scala $ scala Test Some(Scala)
В примере используется метод r() класса String для создания объекта Regex.
Затем используйте метод findFirstIn для нахождения первого соответствия.
Если вам нужно увидеть все соответствия, вы можете использовать метод findAllIn.
Вы можете использовать метод mkString( ) для соединения строк, соответствующих регулярному выражению, и можете использовать символ管道 (|) для установки различных шаблонов:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("(S|s)cala") // Начальная буква может быть большая S или маленькая s val str = "Scala is scalable and cool" println((pattern findAllIn str).mkString(",")) // Использование запятой , для соединения результатов } }
Выполните приведенный код, и результат вывода будет:
$ scalac Test.scala $ scala Test Scala,scala
Если вам нужно заменить соответствующий текст на указанный ключевой слово, вы можете использовать replaceFirstIn( ) Метод для замены первого соответствия, используйте replaceAllIn( ) Метод заменяет все соответствия, пример приведен ниже:
object Test { def main(args: Array[String]) { val pattern = "(S|s)cala".r val str = "Scala is scalable and cool" println(pattern replaceFirstIn(str, "Java")) } }
Выполните приведенный код, и результат вывода будет:
$ scalac Test.scala $ scala Test Java is scalable and cool
Регулярные выражения Scala наследуют грамматические правила Java, а Java использует的大部分 правила основаны на языке Perl.
В таблице приведены некоторые часто используемые правила регулярных выражений:
Выражение | Правила соответствия |
---|---|
^ | Соответствует началу вводимой строки. |
$ | Соответствует концу вводимой строки. |
. | Соответствует любому символу, кроме \r\n |
[...] | Набор символов. Соответствует любому из символов в наборе. Например, "[abc]" соответствует "a" в "plain". |
[^...] | Обратный набор символов. Соответствует любому символу, не входящему в набор. Например, "[^abc]" соответствует "plain" в "p", "l", "i", "n". |
\\A | Соответствует началу вводимой строки (без поддержки многострочных строк) |
\\z | Конец строки (подобно $, но не зависит от параметра обработки многострочных строк) |
\\Z | Конец строки или строки (не зависит от параметра обработки многострочных строк) |
re* | Повторение нуля или более раз |
re+ | Повторение одного или более раз |
re? | Повторение нуля или одного раза |
re{ n} | Повторение n раз |
re{ n,} | Повторение n раз или более |
re{ n, m} | Повторение n до m раз |
a|b | Соответствует a или b |
(re) | Соответствует re, и текст соответствия сохраняется в автоматически названном разделе |
(?: re) | Соответствует re, не запоминает соответствующий текст, не assigns group number к этому разделу |
(?> re) | Жадный подвыражение |
\\w | Соответствует буквам или цифрам или подчеркивающему символу или китайскому символу |
\\W | Соответствует любому символу, кроме букв, цифр, подчеркивающего символа, китайского символа |
\\s | Соответствует любому пробельному символу, эквивалентно [\t\n\r\f] |
\\S | Соответствует любому символу, кроме пробельного |
\\d | Соответствует цифрам, подобно [0-9] |
\\D | Соответствует любому символу, кроме цифрового |
\\G | Начало текущего поиска |
\\n | Перенос строки |
\\b | Обычно это место разделения слов, но если используется в классе символов, означает后退 |
\\B | Соответствует положению, не являющемуся началом или концом слова |
\\t | Табуляция |
\\Q | Начало кавычек:\Q(a+b)*3\E Может соответствовать тексту "(a+b)*3". |
\\E | Конец кавычек:\Q(a+b)*3\E Может соответствовать тексту "(a+b)*3". |
Пример | Описание |
---|---|
. | Соответствует любому символу, кроме \r\n |
[Rr]uby | Соответствует "Ruby" или "ruby" |
rub[ye] | Соответствует "ruby" или "rube" |
[aeiou] | Соответствует строчным буквам :aeiou |
[0-9] | Соответствует любым цифрам, подобно [0123456789] |
[a-z] | Соответствует любым прописным ASCII-буквам |
[A-Z] | Соответствует любым строчным ASCII-буквам |
[a-zA-Z0-9] | Соответствует цифрам и строчным или прописным буквам |
[^aeiou] | Соответствует символам, кроме aeiou |
[^0-9] | Соответствует символам, кроме цифр |
\\d | Соответствует цифрам, подобно: [0-9] |
\\D | Соответствует нецифрам, подобно: [^0-9] |
\\s | Соответствует пробельным символам, подобно: [ \t\r\n\f] |
\\S | Соответствует непробельным символам, подобно: [^ \t\r\n\f] |
\\w | Соответствует буквенным, цифровым, подчеркивающим символам, подобно: [A-Za-z0-9_] |
\\W | Соответствует небуквенным, цифровым, подчеркивающим символам, подобно: [^A-Za-z0-9_] |
ruby? | Соответствие "rub" или "ruby": y является опциональным |
ruby* | Соответствие "rub" и 0 или более y. |
ruby+ | Соответствие "rub" и 1 или более y. |
\\d{3} | Точное соответствие 3 цифр. |
\\d{3,} | Соответствие 3 или более цифр. |
\\d{3,5} | Соответствие 3, 4 или 5 цифр. |
\\D\\d+ | Без группировки: + повторение \d |
(\\D\\d)+/ | Группировка: + повторение \D\d |
([Rr]uby(, )?)+ | Соответствие "Ruby", "Ruby, ruby, ruby" и т.д. |
Обратите внимание, что каждый символ в таблице используется дважды. Это связано с тем, что в Java и Scala обратная косая черта являетсязнаком escape. Поэтому, если вы хотите вывести \, вам нужно записать его как \\ в строке, чтобы получить один обратный слеш. Вот пример:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("abl[ae]\\d+") val str = "ablaw is able1 and cool" println((pattern findAllIn str).mkString(",")) } }
Выполните приведенный код, и результат вывода будет:
$ scalac Test.scala $ scala Test able1