ไทย

เครื่องมือข้อความและชีวิตประจำวัน · ชุดเครื่องมือข้อความ

ตัวอักษรหรือ regex? เหตุใดจุดในข้อความค้นหาของคุณสามารถเปลี่ยนแปลงทุกผลลัพธ์ได้

· เหตุใดจึงสำคัญ

ค้นหาและแทนที่ การแสดงออกปกติ การแก้ไขข้อความ

หมายเลขเวอร์ชันแบบจุดที่ใช้เส้นทางการค้นหาตามตัวอักษรและนิพจน์ทั่วไปแยกกัน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

อธิบายว่าอักขระตัวใดมีความหมายในนิพจน์ทั่วไป มีอะไรผิดปกติเมื่อ 'a.b' หรือ 'v1.2 (เบต้า)' ถูกมองว่าเป็นรูปแบบ และเหตุใดโหมดตัวอักษรที่ Escape ทุกอย่างจึงควรเป็นค่าเริ่มต้น

ค้นหา 'v1.2' และจับคู่ 'v102' — วิธีที่เครื่องมือ regex-first เปลี่ยนเครื่องหมายวรรคตอนเป็นไวด์การ์ดอย่างเงียบๆ

ตัวแทนฝ่ายสนับสนุนที่เปลี่ยนแปลง `v1.2` ในบันทึกประจำรุ่นอาจคาดหวังให้อักขระทั้งสี่ตัวระบุป้ายกำกับเวอร์ชันเดียว อย่างไรก็ตาม เมื่อเปิดใช้งาน Regex จุดจะหมายถึงอักขระใดๆ ยกเว้นการขึ้นบรรทัดใหม่ ดังนั้นรูปแบบจึงสามารถจับคู่ `v102`, `v1-2` หรือ `v1x2` ได้ และแทนที่ทั้งหมดสามารถแก้ไขรายการที่ไม่เคยเป็นส่วนหนึ่งของรุ่นที่ร้องขอได้

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

ตัวอักษรเมตา ได้แก่ จุด วงเล็บ วงเล็บ บวก ดาว เครื่องหมายคำถาม ไปป์ คาเร็ต ดอลลาร์ และแบ็กสแลช และสิ่งที่แต่ละตัวทำ

ในโหมด JavaScript regex จุดคือไวด์การ์ด วงเล็บเหลี่ยมกำหนดคลาสอักขระ วงเล็บสร้างกลุ่ม บวก การทำซ้ำการควบคุมเครื่องหมายดาวและคำถาม และไปป์เสนอทางเลือกอื่น เครื่องหมายคาเร็ตและเครื่องหมายดอลลาร์จะยึดรูปแบบที่จุดเริ่มต้นหรือจุดสิ้นสุดของข้อความทั้งหมดในเครื่องมือนี้ เนื่องจากไม่ได้เปิดใช้งานโหมดหลายบรรทัด

เครื่องหมายแบ็กสแลชจะเปลี่ยนวิธีการอ่านอักขระต่อไปนี้ และเครื่องหมายปีกกาสามารถแสดงจำนวนการซ้ำได้ สัญลักษณ์เหล่านี้มีความสำคัญเฉพาะในตำแหน่งที่ไวยากรณ์ regex ปฏิบัติต่อสัญลักษณ์เหล่านี้เป็นพิเศษเท่านั้น ดังนั้นการจดจำรายการจึงมีความน่าเชื่อถือน้อยกว่าการตัดสินใจว่างานต้องการโหมดใด หากคุณกำลังจับคู่ป้ายกำกับ ส่วนของพาธ หรือชื่อไฟล์ที่ให้มา ให้เริ่มต้นตามตัวอักษร

เมตาอักขระที่สำคัญในโหมด JavaScript regex

โหมดตัวอักษรทำให้การค้นหาหมายถึงสิ่งที่พิมพ์ ToolAcre หลีกอักขระเมตาของนิพจน์ทั่วไปก่อนที่จะรวบรวมการค้นหา ดังนั้น `v1.2 (beta)` จะจับคู่จุด ช่องว่าง และวงเล็บด้วยตนเอง จะไม่เปลี่ยนวลีให้เป็นไวด์การ์ดตามด้วยกลุ่มการจับ และยังคงค้นหาทุกรายการที่เกิดขึ้นในข้อความ

การหลบหนีนั้นเกิดขึ้นเฉพาะในด้านการค้นหาเท่านั้น ฟิลด์การแทนที่ยังคงเป็นไปตาม JavaScript กฎสตริงการแทนที่ โดยที่ `$&` แทรกข้อความที่ตรงกัน และ `$$` จะสร้างเครื่องหมายดอลลาร์หนึ่งอัน การค้นหาตามตัวอักษรจึงเป็นค่าเริ่มต้นที่ปลอดภัยสำหรับการระบุข้อความ แต่การแทนที่ที่มีเครื่องหมายดอลลาร์ยังคงสมควรได้รับการตรวจสอบอย่างรอบคอบก่อนที่จะเลือก แทนที่ทั้งหมด

โหมด Regex — เมื่อคุณต้องการพลัง และวิธีหลีกหนีจากตัวละครแต่ละตัวด้วยตัวเอง

โหมด Regex มีประโยชน์เมื่อหลายรูปแบบควรตรงกับกฎเดียว รูปแบบสามารถกำหนดเป้าหมายช่วงของตัวเลข เครื่องหมายวรรคตอนที่ไม่บังคับ หรือทางเลือกอื่นๆ โดยไม่ต้องแสดงรายการการสะกดทุกแหล่ง เปิด Regex เฉพาะเมื่อความแปรปรวนนั้นเกิดขึ้นโดยตั้งใจ จากนั้นให้หลีกอักขระพิเศษด้วยแบ็กสแลชเมื่อต้องคงความหมายปกติไว้ เช่น `.` สำหรับจุด

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

ตัวอย่างการทำงาน - แทนที่ 'config.yml (เก่า)' ในบันทึกประจำรุ่นในโหมดตัวอักษร จากนั้นลองแบบเดียวกันในโหมด regex เพื่อดูความแตกต่าง

พิจารณาบันทึกประจำรุ่นที่มี `Load config.yml (old)`, `Archive configXyml old` และ `Keep config.yml (new)` เมื่อปิด Regex ให้ค้นหา `config.yml (old)` และแทนที่ด้วย `config.yml (legacy)` วลีแรกเปลี่ยนไปอย่างแน่นอนเนื่องจากมีการหลีกจุดและวงเล็บก่อนที่จะคอมไพล์รูปแบบ

เปิด Regex และส่งการค้นหาแบบไม่ใช้ Escape เดียวกัน จุดสามารถใช้อักขระอื่นได้ ในขณะที่กลุ่มวงเล็บ `old` แทนที่จะจับคู่วงเล็บตามตัวอักษร ดังนั้นบรรทัดที่ต้องการจึงไม่ตรงกับที่เขียนไว้อีกต่อไป regex ที่เทียบเท่ากันต้องมี `config.yml (old)` เวอร์ชันตามตัวอักษรจะสั้นกว่า ชัดเจนกว่า และสอดคล้องกับงานข้อความที่ตรงกันทุกประการมากกว่า

ข้อผิดพลาดทั่วไป — การเว้นวรรคต่อท้ายในช่องค้นหา การผสมผสานทั้งคำและตัวอักษร และลืมตรวจสอบการนับการแทนที่

ช่องต่อท้ายนั้นมองข้ามได้ง่ายเนื่องจากช่องค้นหาให้น้ำหนักการมองเห็นเพียงเล็กน้อย แต่โหมดตามตัวอักษรจะยังคงอยู่ การค้นหา `beta ` จะไม่ตรงกับ `beta` ที่ท้ายบรรทัด ตรวจสอบขอบเขตของฟิลด์เมื่อคำที่มองเห็นได้ชัดเจนรายงานว่าไม่มีการแทนที่ และหลีกเลี่ยงการเพิ่มช่องว่างเพียงเพื่อแยกข้อความที่คัดลอกมาจากร้อยแก้วโดยรอบ

ทั้งคำไม่ใช่ชื่ออื่นสำหรับตัวอักษร โดยจะล้อมการค้นหาที่คอมไพล์ไว้ในขอบเขตคำ ซึ่งใช้ ASCII ที่นี่ และอาจล้มเหลวเมื่อใช้เครื่องหมายวรรคตอนหรือคำที่เน้นเสียง ตรวจสอบจำนวนการเปลี่ยนทุกครั้งหลังการวิ่ง และใช้ Undo เมื่อเกิดเหตุการณ์น่าประหลาดใจ การนับนี้เป็นหลักฐานเกี่ยวกับขอบเขต ไม่ใช่ข้อความความสำเร็จในการตกแต่ง

ข้อผิดพลาดทั่วไป: การเว้นวรรค ขอบเขตทั้งคำ และไวยากรณ์การแทนที่

หน้านี้ไม่ได้พยายามให้คำแนะนำฉบับสมบูรณ์เกี่ยวกับแฟล็กนิพจน์ทั่วไป ToolAcre ใช้การจับคู่ส่วนกลางและการจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (ไม่บังคับ) ในขณะที่จุดยึดยังคงอ้างอิงถึงข้อความที่สมบูรณ์มากกว่าแต่ละบรรทัด รูปแบบที่คัดลอกมาจากเอ็นจิ้นที่มีแฟล็กอินไลน์ คลาส POSIX หรือไวยากรณ์อื่นอาจล้มเหลวในการคอมไพล์หรืออาจหมายถึงอย่างอื่นในเบราว์เซอร์

รองรับกลุ่มการจับภาพ ดังนั้นโครงร่างจำเป็นต้องมีการแก้ไข แทนที่จะบอกว่าอยู่นอกเครื่องมือ ในโหมด Regex คุณสามารถอ้างอิงกลุ่มด้วย `$1`, `$2` และหมายเลขที่ใหม่กว่าในการแทนที่ ความสามารถนั้นแยกจากการค้นหาตามตัวอักษรและจากการควบคุมแฟล็กที่จำกัด ใช้เฉพาะเมื่อการปรับโครงสร้างข้อความที่ตรงกันเป็นเป้าหมายที่แท้จริงเท่านั้น

ธงมีการจำกัดที่นี่ ในขณะที่กลุ่มยึดได้รับการสนับสนุนในการทดแทน

กฎการปฏิบัตินั้นง่ายมาก: ปล่อย Regex ไว้เมื่อแทนที่เวอร์ชัน ชื่อไฟล์ ป้ายกำกับผลิตภัณฑ์ หรือส่วนของประโยคที่รู้จัก โหมดตัวอักษรจะหลีกอักขระพิเศษโดยอัตโนมัติ โดยคงเครื่องหมายวรรคตอนที่ระบุเป้าหมายไว้ เปิดใช้งาน Regex เฉพาะเมื่อคุณระบุได้ว่ารูปแบบใดที่รูปแบบควรยอมรับ และเหตุใดการค้นหาแบบตรงทั้งหมดจึงไม่เพียงพอ

ก่อนที่จะดำเนินการแก้ไขบันทึกประจำรุ่น ให้เปรียบเทียบจำนวนที่รายงานกับจำนวนการเปลี่ยนแปลงที่คุณคาดหวัง และตรวจสอบผลลัพธ์ ToolAcre ปล่อยให้รูปแบบที่ไม่ถูกต้องไม่ถูกแตะต้อง และให้ Undo สำหรับรูปแบบที่ถูกต้องซึ่งไปไกลเกินไป การป้องกันเหล่านั้นช่วยได้ แต่การเลือกโหมดตามตัวอักษรสำหรับงานตามตัวอักษรจะป้องกันการจับคู่แบบกว้างก่อนที่จะเกิดขึ้น