การเชี่ยวชาญใน 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 เป็นกำลังใจในการเขียนโค้ดของคุณ แล้วคุณจะพบว่าคุณสามารถทำให้หลาย ๆ งานที่ซับซ้อนง่ายขึ้นในการพัฒนาโปรแกรมของคุณ