นิพจน์ปกติสกาล่า
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