Latest web development tutorials

นิพจน์ปกติสกาล่า

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)

ตัวอย่างการใช้งานของคลาส String R () วิธีการที่จะสร้างวัตถุ 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"
[^ ... ] ชุดตัวอักษรย้อนกลับ ตรงกับตัวอักษรใด ๆ ไม่รวม ยกตัวอย่างเช่น "[^ abc]" ตรงกับ "ธรรมดา" ใน "P", "L", "ฉัน", "n"
\\ ตรงกับตำแหน่งสายป้อนเริ่มต้น (ไม่มีการสนับสนุนหลายคู่สาย)
\\ Z จุดสิ้นสุดของสตริง ($ คล้ายกัน แต่ไม่ได้ส่งผลกระทบต่อการรักษาตัวเลือกสำหรับหลายแถว)
\\ Z ท้ายของสตริงหรือจุดสิ้นสุดของเส้น (จากการรักษาเกี่ยวกับตัวเลือกหลายบรรทัด)
อีกครั้ง * ซ้ำแล้วซ้ำอีกเป็นศูนย์หรือมากกว่าครั้ง
Re + ซ้ำแล้วซ้ำอีกหนึ่งครั้งหรือมากกว่า
อีกครั้ง? ซ้ำแล้วซ้ำอีกศูนย์หรือหนึ่งครั้ง
Re {n} ซ้ำแล้วซ้ำอีกครั้ง n
อีกครั้ง {n}
Re {n, m} ซ้ำแล้วซ้ำอีกครั้ง n M
a | b การแข่งขันหรือ B
(อีกครั้ง) การแข่งขันอีกครั้งและจับข้อความไปยังกลุ่มอัตโนมัติชื่อ
(: Re) การแข่งขันอีกครั้งไม่จับข้อความที่ตรงกันหรือไปยังกลุ่มที่ได้รับมอบหมายจำนวนกลุ่มนี้
(?> Re) subexpressions โลภ
\\ W ตัวอักษร Match หรือตัวเลขหรือตัวอักษรที่ขีดเส้นใต้หรือ
\\ W ไม่ตรงกับตัวอักษรตัวเลขขีดตัวอักษรจีน
\\ S ตรงกับช่องว่างใด ๆ เทียบเท่ากับ [\ t \ n \ r \ F]
\\ S ไม่ตรงกับตัวอักษรช่องว่างใด ๆ
\\ D ตัวเลขที่ตรงกับที่คล้ายกับ [0-9]
\\ D ตรงกับตัวละครที่ไม่ใช่ตัวเลขใด ๆ
\\ G จุดเริ่มต้นของการค้นหาปัจจุบัน
\\ N ขึ้นบรรทัดใหม่
\\ B มักจะเป็นตำแหน่งขอบเขตของคำ แต่ถ้าคุณใช้ตัวอักษรที่แสดงให้เห็นถึงระดับ Backspace
\\ B สถานที่ตั้งไม่ตรงกับจุดเริ่มต้นหรือจุดสิ้นสุดของคำ
\\ T แท็บ
\\ Q เริ่มที่อ้าง: \ Q (A + B) * 3 \ E ตรงกับข้อความ "(A + B) * 3 "
\\ E Endquote: \ Q (A + B) * 3 \ E ตรงกับข้อความ "(A + B) * 3 "

ตัวอย่างของการแสดงออกปกติ

ตัวอย่าง ลักษณะ
. ตรงกับตัวอักษรตัวเดียวใด ๆ ยกเว้น "\ r \ n" คือ
[Rr] uby การแข่งขัน "ทับทิม" หรือ "ทับทิม"
ถู [เจ้า] การแข่งขัน "ทับทิม" หรือ "คนบ้านนอก"
[Aeiou] ตรงกับอักษรตัวพิมพ์เล็ก: Aeiou
[0-9] ตรงกับหลัก ๆ คล้ายกับ [0123456789]
[Az] ตรงกับตัวอักษรตัวพิมพ์เล็ก ASCII ใด ๆ
[AZ] ตรงกับตัวพิมพ์ใหญ่ใด 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_]
ทับทิม? การแข่งขัน "ถู" หรือ "ทับทิม": Y เป็นตัวเลือก
ทับทิม * การแข่งขัน "ถู" บวกศูนย์หรือมากกว่าของ Y
ทับทิม + การแข่งขัน "ถู" บวกหนึ่งหรือมากกว่าของ Y
\\ D {3} ตรงสามตัวเลข
\\ D {3} ตรงกับสามหรือมากกว่าตัวเลข
\\ D {3,5} ตรงกับสามสี่หรือห้าตัวเลข
\\ \\ D D + ไม่มีการจัดกลุ่ม + ซ้ำ \ D
(D \\ \\ D) + / กลุ่ม: + ซ้ำ \ D \ D เพื่อ
([Rr] uby (,)?) + การแข่งขัน "ทับทิม", "ทับทิมทับทิมทับทิม" ฯลฯ

โปรดทราบว่าตารางข้างต้นสำหรับตัวละครแต่ละตัวใช้สองทับขวา นี้เป็นเพราะในเกาะชวาและสกาล่าทับขวาในสตริงเป็นตัวหนี ดังนั้นถ้าคุณต้องการที่จะส่งออก. \. คุณต้องเขียนในสตริง. \\. ในการได้รับเครื่องหมาย ดูตัวอย่างต่อไปนี้:

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