Latest web development tutorials

Scala Регулярные выражения

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)

Примеры использования метода класса Строка г () для построения 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.

В следующей таблице дает нам некоторые общие регулярные выражения правила:

выражение правило соответствия
^ Матч начинается входной строки.
$ Матч входной конец позиции строки.
, Соответствует любому символу, за исключением "\ г \ п" есть.
[...] Набор символов. Соответствует любому символу включен. Например, "[ABC]" соответствует "простой" в "а".
[^ ...] Обратный набор символов. Соответствует любому символу, не включены. Например, "[^ ABC]" соответствует "простой" в "р", "л", "я", "п".
\\ А Матч стартовую позицию входной строки (без многострочный поддержки)
\\ Z Конец строки ($ подобное, но не влияют на параметры обработки для нескольких строк);
\\ Z Конец строки или конец строки (от обработки на параметры нескольких строк)
Re * Повторные ноль или более раз
Re + Повторена один или несколько раз,
повторно? Повторные ноль или один раз
Re {п} Повторные п раз
повторно {п,}
Re {п, т} Повторные п в т раз
а | б Совпадение или б
(Re) Матч вновь и захватить текст с автоматическим именем группы
(?: Re) Матч повторно, не захватить текст соответствия, ни к этой группе присваивается номер группы
(?> Re) Жадные подвыражения
\\ W Соответствие букв или цифр или символов подчеркивания или
\\ W Не найдено ни одного буквы, цифры, знак подчеркивания, китайские иероглифы
\\ S Соответствует любому пустое пространство, что эквивалентно [\ т \ п \ г \ F]
\\ S Не соответствует ни одному пробелам
\\ D Номера Matching, аналогичные [0-9]
\\ D Соответствует любому нечисловые символы
\\ G Начало текущего поиска
\\ N Newline
\\ В Обычно положение границы слова, но если вы используете символ класс представляет забой
\\ В Расположение не соответствует началу или концу слова
\\ Т Вкладки
\\ Q Началоцитаты: \ Q (A + B) * 3 \ Е соответствует текст "(A + B) * 3 ".
\\ E Конеццитаты: \ Q (а + Ь) * 3 \ Е соответствует текст "(а + Ь) * 3 ".

Примеры регулярных выражений

примеров описание
, Соответствует любому символу, за исключением "\ г \ п" есть.
[Rr] убий Матч "Рубин" или "Рубин"
руб [вы] Матч "Рубин" или "деревенщина"
[AEIOU] Матч строчных букв: аеиоу
[0-9] Соответствует любой цифре, похожий на [0123456789]
[Az] Соответствует любому ASCII прописные буквы
[AZ] Соответствует любому ASCII в верхнем регистре
[A-Za-z0-9] Соответствующие цифры, прописные и строчные буквы
[^ AEIOU] В дополнение к соответствию других символов аеиоу
[^ 0-9] Соответствует любому символу, кроме цифр
\\ D Соответствующие цифры, например: [0-9]
\\ D числа Несовпадающие, как это: [^ 0-9]
\\ S Совпадение пространства, похожие на: [\ т \ г \ п \ F]
\\ S Соответствие некосмическими, аналогично: [^ \ т \ г \ п \ F]
\\ W Совпадение буквы, цифры, подчеркивания, похожие на: [A-Za-z0-9_]
\\ W Несовпадающие буквы, цифры, подчеркивания, похожие на: [^ A-Za-z0-9_]
рубин? Матч "руб" или "Рубин": у необязательно
рубин * Матч "руб" плюс ноль или больше у.
рубин + Матч "руб" плюс один или более у.
\\ D {3} Точное соответствие три числа.
\\ D {3} Совпадение трех или более цифр.
\\ D {3,5} Матч три, четыре или пять номеров.
\\ D \\ d + Нет Группировка: + повторив \ d
(\\ D \\ d) + / Группа: + повторение \ D \ d, чтобы
([Rr] убий (,)?) + Матч "Рубин", "Рубин, рубин, рубин" и т.д.

Следует отметить, что приведенная выше таблица для каждого символа используются два обратной косой черты. Это происходит потому, что в Java и Scala обратной косой чертой в строке является маскирующим. Так что если вы хотите вывести. \., Вам нужно написать в строке. \\. Чтобы получить обратную косую черту. Смотрите следующие примеры:

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