การเชี่ยวชาญใน Regex: วิธีการจับคู่สตริงที่เริ่มต้นด้วยหนึ่งซับสตริงและไม่สิ้นสุดด้วยอีกหนึ่ง

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

ปัญหา

สมมติว่าคุณต้องการตรวจสอบความถูกต้องของสตริงในแอปพลิเคชันของคุณ คุณต้องมั่นใจว่า:

  • สตริงต้องเริ่มต้นด้วยซับสตริงเฉพาะ เช่น "foo"
  • สตริงต้องไม่สิ้นสุดด้วยซับสตริงอีกหนึ่ง เช่น "bar"

ตัวอย่างการจับคู่ที่ถูกต้อง ได้แก่:

  • foo123
  • foolish
  • foo

ขณะที่การจับคู่ที่ไม่ถูกต้องจะมีลักษณะเช่น:

  • foobar
  • foo bar

นี่อาจจะยุ่งยาก โดยเฉพาะหากคุณใช้ regex ใน Java หรือภาษาโปรแกรมอื่น ๆ ที่มีไวยากรณ์ regex ที่คล้ายกัน

วิธีแก้ปัญหา

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

การสร้างรูปแบบ Regex

สำหรับสถานการณ์เฉพาะของเรา เราสามารถกำหนดรูปแบบ regex ของเราได้ดังนี้:

foo.*(?<!bar)$

การแบ่งส่วนของรูปแบบ

  • foo: รูปแบบเริ่มต้นด้วยตัวอักษรที่เป็นลำดับ “foo”
  • .*: จุด . จับคู่กับตัวอักษรใด ๆ (ยกเว้นเครื่องหมายสิ้นสุดบรรทัด) และดอกจัน * หมายถึงศูนย์หรือมากกว่าการเกิดขึ้นของตัวอักษรนั้น
  • (?<!bar): นี่คือการยืนยันการดูย้อนแบบลบ มันตรวจสอบว่าสตริงไม่ได้สิ้นสุดด้วย “bar”
  • $: สิ่งนี้ยืนยันว่าเราอยู่ที่จุดสิ้นสุดของบรรทัดหรือสตริง

ประเด็นสำคัญที่ต้องจดจำ

  • การดูย้อนแบบลบ: คุณสมบัติ regex นี้ช่วยให้คุณสามารถกำหนดเงื่อนไขตามสิ่งที่ไม่ปรากฏอยู่ที่จุดสิ้นสุดของสตริง
  • ความสามารถในการพกพา: รูปแบบ regex ที่ให้มาทำงานได้อย่างมีประสิทธิภาพใน Java และได้รับการตรวจสอบว่าใช้ได้ในภาษา C# ด้วย

ตัวอย่างการใช้งานใน Java

นี่คือวิธีที่คุณอาจใช้ regex นี้ในโปรแกรม Java:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String regex = "foo.*(?<!bar)$";
        String[] testStrings = { "foobar", "foo123", "foolish", "foo bar" };

        for (String testString : testStrings) {
            if (Pattern.matches(regex, testString)) {
                System.out.println(testString + " matches.");
            } else {
                System.out.println(testString + " does not match.");
            }
        }
    }
}

สรุป

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

ให้ความรู้เกี่ยวกับ regex เป็นกำลังใจในการเขียนโค้ดของคุณ แล้วคุณจะพบว่าคุณสามารถทำให้หลาย ๆ งานที่ซับซ้อนง่ายขึ้นในการพัฒนาโปรแกรมของคุณ