เป็นคำถามง่ายๆเกี่ยวกับนิพจน์ทั่วไป แต่ฉันไม่พบคำตอบ
ฉันต้องการตรวจสอบว่าตัวเลขปรากฏตามลำดับสองหรือสี่ครั้งหรือไม่ ฉันสามารถใช้ไวยากรณ์อะไรได้บ้าง?
\d{what goes here?}
ฉันพยายาม\d{2,4}
แล้ว แต่นิพจน์นี้ยอมรับตัวเลขสามหลักเช่นกัน
เป็นคำถามง่ายๆเกี่ยวกับนิพจน์ทั่วไป แต่ฉันไม่พบคำตอบ
ฉันต้องการตรวจสอบว่าตัวเลขปรากฏตามลำดับสองหรือสี่ครั้งหรือไม่ ฉันสามารถใช้ไวยากรณ์อะไรได้บ้าง?
\d{what goes here?}
ฉันพยายาม\d{2,4}
แล้ว แต่นิพจน์นี้ยอมรับตัวเลขสามหลักเช่นกัน
abc 123 xyz
อะไร? มันควรจะตรงกันไหม12
เพราะนั่นคือตัวเลขสองหลักตามลำดับ หรือไม่ควรเพราะ12
เป็นส่วนหนึ่งของลำดับตัวเลขที่ใหญ่กว่า123
ซึ่งไม่ยาว 2 หรือ 4? ถ้าให้เดาฉันคิดว่าคุณต้องการพฤติกรรมแบบหลัง แต่คำถามของคุณยังไม่ชัดเจน ตัวอย่างและ / หรือข้อกำหนดที่ชัดเจนขึ้นจะช่วยได้ คำถามเดียวกันสำหรับabc 12345 def
... จะเกิดอะไรขึ้นที่นั่น?
คำตอบ:
ไม่มีไวยากรณ์เฉพาะสำหรับสิ่งนั้น แต่มีหลายวิธีที่จะทำ:
(?:\d{4}|\d{2}) <-- alternation: four digits or two
\d{2}(?:\d{2})? <-- two digits, and optionally two more
(?:\d{2}){1,2} <-- two digits, times one or two
\d{2}(?:\d{2})?
วิธีแก้ปัญหาจากค้างคาวเท่านั้น - ความหลากหลายที่ดี - อันสุดท้ายโดยเฉพาะอย่างยิ่งดูเหมือนดีมากและปรับขนาดได้
(?:
สิ่งนี้จะเริ่ม "กลุ่มที่ไม่จับภาพ" (กลุ่มที่ไม่ได้ตั้งใจให้อ้างอิงในคำสั่งแทนที่) คุณยังสามารถใช้ parens ได้ แต่สิ่งเหล่านี้จะสร้างกลุ่มการจับภาพ รายละเอียดเพิ่มเติมที่นี่: stackoverflow.com/questions/3512471/non-capturing-group
"333"
ทั้งหมด คุณอาจใช้ฟังก์ชัน "ค้นหาสตริงย่อยที่ตรงกัน" ของไลบรารี regex โดยไม่ได้ตั้งใจแทนที่จะเป็นฟังก์ชัน "ตรวจสอบว่าสตริงสมบูรณ์ตรงกัน" หรือไม่ คุณควรศึกษาเอกสารประกอบ
(?<!\d)(\d{2}|\d{4})(?!\d)
นี่เป็นวิธีที่ถูกต้องในการทำ คำตอบที่ยอมรับนั้นผิด
มันจะตรงกับ 3 หลัก (หรือ 5) เพื่อให้เป็นที่ไม่ถูกต้องในสายตาของฉัน
1) ตรวจสอบว่าไม่มีตัวเลขก่อนลำดับ 2 หรือ 4 หลักหรือหลังลำดับสองหรือสี่หลัก
(<!)
ไวยากรณ์เป็นลักษณะเชิงลบเบื้องหลัง
(?!)
ไวยากรณ์เป็นผู้มองเชิงลบ
ข้างต้นจะใช้ได้กับสตริงกลาง:
ถ้าสตริงการค้นหาของคุณมีเนื้อหารอบ ๆ มันไม่มีคุณสามารถใช้^
และ$
เริ่มต้นและสิ้นสุดของจุดยึดสตริง:
^\d{4}$|^\d{2}$
(?<!\d)(\d{2}|\d{4})(?!\d)
^\d{4}$|^\d{2}$
จะเป็นวิธีที่เป็นไปได้ในการแก้ไขปัญหานั้น ตามที่จะเป็น^\d{2}(?!\d)|^\d{4}(?!\d)