Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

คู่มือเริ่มต้น Regular Expressions (Regex) สำหรับมือใหม่

เคยพยายามหา recurring pattern ในข้อความชิ้นหนึ่งไหม? อาจใช้ search function ใน browser หรือ word processor แต่ต้องการหาอะไรซับซ้อนกว่านั้น ก็เหมือนหาเข็มในกองหญ้า

โชคดีที่มีวิธีคัด pattern ที่แม่นยำในข้อความจนระดับตัวอักษร เรียกว่า regular expressions (RegEx) ให้คุณกลายเป็น master ของการค้นหาข้อความ

ใช้ RegEx ได้ที่ไหน?

แม้ Unix และ Linux ทำให้ RegEx โดดเด่น แต่มันมีในหลายแพ็กเกจ รวมถึง Microsoft Word

Regular expressions ใช้โดดเด่นในโปรแกรม Linux หลายตัว เช่น grep, Awk และ Sed

ตัวอย่าง ต้องการเช็ค USB devices บน PC ใช้ lspci จะเห็น devices ทั้งหมด ต้องหา USB entries เอง แต่ใช้คำสั่งนี้จะแสดงเฉพาะ USB devices:

lspci | grep "USB"

นี่คือตัวอย่าง RegEx เรียบง่ายที่สุด วิธีใช้ RegEx ในเทอร์มินัลยอดนิยม แต่ไม่ใช่เพียงวิธีเดียว วันนี้ RegEx support มีในหลายซอฟต์แวร์ จาก text editors ไปจนถึง file managers

การหา Patterns

คุณคงเคยใช้ตัวอักษร * ซึ่งเป็น wildcard ตอนเลือกไฟล์/โฟลเดอร์ในเทอร์มินัล ตัวอย่าง ลิสต์ไฟล์ JPG ทั้งหมดในโฟลเดอร์:

ls *.jpg

RegEx equivalent:

ls | grep -E "\.jpg"

ค้นหา jpg และ png พร้อมกัน:

ls | grep -E "(\.jpg|\.png)"

Ranges (ช่วง)

หากต้องการค้นหาช่วงตัวอักษรเฉพาะ แทน pattern ให้กำหนดใน brackets ถ้าใช้ [a-z] เป็น pattern จะจับคู่สตริงที่ประกอบด้วยตัวอักษรพิมพ์เล็ก a-z ใดๆ

[A-Z] จับคู่ตัวพิมพ์ใหญ่เท่านั้น ต้องการช่วงตัวอักษรทั้งพิมพ์เล็กและใหญ่ ใช้ [a-zA-Z]

ระบุจำนวน instance เฉพาะของ pattern ใช้ curly brackets {5} คืน 5 occurrences ของ pattern ใช้ ranges ได้ {5,10} แสดง 5-10 instances

MetaCharacters

ใน RegEx สามารถค้นหาส่วนของสตริงด้วย 2 ตัวอักษร เรียกว่า metacharacters คล้าย wildcard matches ใน shell

ตัวหลักคือ dot (.) แทนตัวอักษรเดี่ยวอะไรก็ได้ ถ้าใช้ pattern c.ll จะจับคู่ "cell" และ "cull" และ "call"

ใส่ asterisk หลัง dot ใช้จับคู่ตัวอักษรไม่จำกัดจำนวน เช่น .*board จับคู่ "keyboard" และ "skateboard" แม้ "key" และ "skate" จะต่างตัวอักษร

Escape Characters

อาจสังเกตในตัวอย่างเลือก image file types เราใช้ backslash ก่อน period (\.jpg) นัคือวิธี escape special characters ใน RegEx

ถ้าไม่ใช้ มันจะไม่จับคู่แค่ extensions เช่น ".jpg" และ ".png" แต่จะจับคู่ "ajpg" และ "opng" ด้วย เพราะ . เป็น wildcard จับคู่ตัวอักษรอะไรก็ได้

Anchors และ Boundaries

Anchors และ boundaries ให้กำหนดสิ่งที่ค้นหาได้แม่นยำขึ้น

หาคำเดี่ยว "computer" โดยไม่มีตัวอักษรอื่นนำหน้าหรือท้าย กำหนด pattern เป็น \<computer\>

ค้นหา pattern ที่อยู่ต้นบรรทัดหรือท้ายบรรทัด ใช้ ^ และ $ ตามลำดับ

ตัวอย่าง หา entry ที่ "computer" อยู่ต้นบรรทัด: ^computer ตรงข้าม อยู่ท้ายบรรทัด: computer$

นี่คือกฎพื้นฐาน RegEx ที่ผสมผสานได้ เพื่อหา pattern ที่แม่นยำ เช่น character ranges ต้นบรรทัด, alternating words ท้ายบรรทัด, วันที่เฉพาะ, หรือช่วงปี ด้วยสตริงเดียว

อย่าลืมดู Regular Expressions cheatsheet ของเราเพื่อ master regular expressions