โปรแกรมเมอร์หลายคนรู้ว่าความสุขของการแสดงออกอย่างรวดเร็วเป็นประจำทุกวันนี้มักมีความช่วยเหลือจากเว็บเซอร์วิสบางอย่างหรือมากกว่านั้นในการโต้ตอบแบบโต้ตอบหรืออาจจะเขียนสคริปต์ขนาดเล็กที่มีนิพจน์ทั่วไปที่กำลังพัฒนาอยู่และชุดกรณีทดสอบ . ไม่ว่าในกรณีใดกระบวนการนี้จะทำซ้ำและค่อนข้างเร็ว: ทำการแฮ็กที่สตริงที่มีลักษณะที่เป็นความลับจนกว่าจะจับคู่และจับภาพสิ่งที่คุณต้องการและจะปฏิเสธสิ่งที่คุณไม่ต้องการ
สำหรับผลกรณีง่าย ๆ อาจเป็นแบบนี้ในฐานะ Java regexp:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
โปรแกรมเมอร์หลายคนรู้ถึงความเจ็บปวดที่ต้องแก้ไขนิพจน์ปกติหรือเพียงแค่เขียนโค้ดรอบนิพจน์ปกติในฐานรหัสดั้งเดิม ด้วยการแก้ไขเล็กน้อยเพื่อแยกมันออกไปข้างต้น regexp ยังง่ายต่อการเข้าใจสำหรับทุกคนที่คุ้นเคยกับ regexps และทหารผ่านศึก regexp ควรเห็นทันทีว่ามันทำอะไร (ตอบที่ท้ายโพสต์ในกรณีที่มีคนต้องการออกกำลังกาย ในการหาตัวเอง)
อย่างไรก็ตามสิ่งที่ไม่จำเป็นต้องซับซ้อนมากขึ้นสำหรับ regexp ที่จะกลายเป็นสิ่งที่เขียนอย่างเดียวและแม้กระทั่งกับเอกสารขยัน (ซึ่งทุกคนแน่นอนสำหรับ regexps ที่ซับซ้อนทั้งหมดที่พวกเขาเขียน ... ) การปรับเปลี่ยน regexps กลายเป็น งานที่น่ากลัว มันอาจเป็นงานที่อันตรายมากเช่นกันหาก regexp ไม่ได้ทำการทดสอบอย่างระมัดระวัง (แต่ทุกคนแน่นอนมีการทดสอบหน่วยที่ครอบคลุมสำหรับ regexps ที่ซับซ้อนทั้งหมดทั้งในเชิงบวกและเชิงลบ ... )
เรื่องสั้นสั้น ๆมีวิธีแก้ไข / อ่านทางเลือกสำหรับการแสดงออกปกติโดยไม่สูญเสียพลังของพวกเขา? regexp ข้างต้นจะมีลักษณะอย่างไรกับวิธีการทางเลือก? ภาษาใดก็ได้ แต่การแก้ปัญหาหลายภาษาจะดีที่สุด แต่สำหรับ regexps ระดับปริญญาเป็นหลายภาษา
จากนั้นสิ่งที่ regexp ก่อนหน้าทำคือ: แยกสตริงของตัวเลขในรูปแบบ1:2:3.4
จับแต่ละหมายเลขที่อนุญาตให้มีช่องว่างและ3
จำเป็นเท่านั้น