Latest web development tutorials

Regular Expressions scala

Scala olehscala.util.matching Regex jenis paket kelas untuk mendukung ekspresi reguler.Contoh berikut menunjukkan penggunaan rutin kata pencarian ekspresiScala:

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)
   }
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
Some(Scala)

Contoh penggunaan metode kelas String r () untuk membangun sebuah objek Regex.

Kemudian gunakan findFirstIn cara untuk menemukan pertandingan pertama.

Jika Anda perlu melihat semua pertandingan dapat digunakan metode findAllIn.

Anda dapat menggunakan metode mkString () untuk menghubungkan ekspresi reguler cocok string, dan Anda dapat menggunakan pipa (|) untuk mengatur modus yang berbeda:

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(","))   // 使用逗号 , 连接返回结果
   }
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
Scala,scala

Jika Anda perlu mengganti pencocokan teks kata kunci tertentu, Anda dapat menggunakan metodereplaceFirstIn () untuk menggantikan pertandingan pertama, menggunakan replaceAllIn ()metode menggantikan semua pertandingan, contoh adalah sebagai berikut:

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"))
   }
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
Java is scalable and cool

Regular Expressions

Scala ekspresi reguler aturan sintaks warisan Jawa, Jawa akan menggunakan sebagian besar aturan bahasa Perl.

Tabel berikut memberikan kita beberapa aturan umum ekspresi reguler:

ekspresi aturan pencocokan
^ Cocok dengan string input dimulai.
$ Mencocokkan akhir masukan dari posisi tali.
. Cocok dengan satu karakter apapun kecuali "\ r \ n" adalah.
[...] Set karakter. Cocok karakter apapun termasuk. Misalnya, "[abc]" cocok "polos" di "a".
[^ ...] set karakter sebaliknya. Cocok karakter apapun tidak disertakan. Misalnya, "[^ abc]" cocok "polos" di "p", "l", "i", "n".
\\ A Sesuai dengan posisi string input awal (tidak ada dukungan multi-line)
\\ Z Akhir string ($ serupa, tetapi tidak mempengaruhi pilihan pengobatan untuk beberapa baris)
\\ Z Akhir string atau akhir baris (dari pengobatan pada pilihan multiple-line)
re * Diulang nol atau lebih kali
re + Diulang satu kali atau lebih
kembali? Diulang nol atau satu kali
re {n} Diulang n kali
re {n,}
re {n, m} Diulang n untuk kali m
a | b Sebuah pertandingan atau b
(Re) Pertandingan ulang, dan menangkap teks ke kelompok auto-nama
(:? Re) Pertandingan ulang, tidak menangkap teks yang cocok, atau ke nomor kelompok kelompok ditugaskan ini
(?> Re) subexpressions Greedy
\\ W huruf pertandingan atau angka, atau karakter garis bawah atau
\\ W Tidak ditemukan huruf, angka, garis bawah, karakter Cina
\\ S Cocok spasi apapun, setara dengan [\ t \ n \ r \ f]
\\ S Tidak dapat ditemukan pada karakter spasi
\\ D nomor yang cocok, mirip dengan [0-9]
\\ D Cocok setiap karakter non-numerik
\\ G Awal pencarian saat
\\ N baris baru
\\ B Biasanya posisi batas kata, tetapi jika Anda menggunakan karakter kelas merupakan backspace
\\ B Lokasi tidak cocok dengan awal atau akhir kata
\\ T tab
\\ Q Mulaiquote: \ Q (a + b) * 3 \ E cocok teks "(a + b) * 3 ".
\\ E Endquote: \ Q (a + b) * 3 \ E cocok teks "(a + b) * 3 ".

Contoh ekspresi reguler

contoh deskripsi
. Cocok dengan satu karakter apapun kecuali "\ r \ n" adalah.
[Rr] uby Pertandingan "Ruby" atau "ruby"
menggosok [kamu] Pertandingan "ruby" atau "rube"
[Aeiou] Mencocokkan huruf kecil: aeiou
[0-9] Cocok setiap digit, mirip dengan [0123456789]
[Az] Cocok setiap huruf ASCII huruf kecil
[AZ] Cocok dengan ASCII huruf besar
[A-zA-Z0-9] Pencocokan angka, huruf besar dan huruf kecil
[^ Aeiou] Selain cocok karakter lain aeiou
[^ 0-9] Cocok karakter apapun selain nomor
\\ D Pencocokan nomor, seperti ini: [0-9]
\\ D nomor tidak cocok, seperti ini: [^ 0-9]
\\ S spasi pertandingan, sama dengan: [\ t \ r \ n \ f]
\\ S Pencocokan non-ruang, serupa dengan: [^ \ t \ r \ n \ f]
\\ W huruf pertandingan, angka, garis bawah, mirip dengan: [A-Za-Z0-9_]
\\ W surat tidak cocok, angka, garis bawah, mirip dengan: [^ A-Za-Z0-9_]
ruby? Pertandingan "menggosok" atau "ruby": y adalah opsional
ruby * Pertandingan "menggosok" plus nol atau lebih dari y.
ruby + Pertandingan "menggosok" plus satu atau lebih dari y.
\\ D {3} Tepat mencocokkan tiga angka.
\\ D {3,} Mencocokkan tiga atau lebih digit.
\\ D {3,5} Mencocokkan tiga, empat atau lima nomor.
\\ D \\ d + Tidak ada Pengelompokan: + mengulangi \ d
(\\ D \\ d) + / Kelompok: + mengulangi \ D \ d untuk
([Rr] uby (,)?) + Pertandingan "Ruby", "Ruby, ruby, ruby", dll

Perhatikan bahwa tabel di atas untuk masing-masing karakter menggunakan dua backslash. Hal ini karena di Jawa dan Scala backslash dalam string adalah karakter escape. Jadi jika Anda ingin output. \., Anda perlu menulis dalam string. \\. Untuk mendapatkan garis miring terbalik. Lihat contoh berikut:

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(","))
   }
}

Pelaksanaan kode di atas, output adalah:

$ scalac Test.scala 
$ scala Test
able1