14
คุณจะจับคู่เฉพาะตัวเลขโรมันที่ถูกต้องกับการแสดงออกปกติได้อย่างไร
เมื่อคิดถึงปัญหาอื่น ๆ ของฉันฉันตัดสินใจว่าฉันไม่สามารถสร้างนิพจน์ทั่วไปที่จะจับคู่กับตัวเลขโรมันได้ ปัญหาคือการจับคู่เฉพาะตัวเลขโรมันที่ถูกต้อง เช่น 990 ไม่ใช่ "XM" แต่เป็น "CMXC" ปัญหาของฉันในการสร้าง regex สำหรับเรื่องนี้คือเพื่อให้อนุญาตหรือไม่อนุญาตให้ใช้อักขระบางตัวฉันต้องมองย้อนกลับไป ตัวอย่างเช่นลองมาเป็นพัน ๆ ฉันสามารถอนุญาต M {0,2} C? M (อนุญาตสำหรับ 900, 1,000, 1900, 2000, 2900 และ 3000) อย่างไรก็ตามหากการแข่งขันอยู่บน CM ฉันไม่สามารถอนุญาตให้ตัวละครที่ตามมาเป็น C หรือ D ได้ (เพราะฉันอยู่ที่ 900) ฉันจะแสดงสิ่งนี้ใน regex ได้อย่างไร ถ้ามันไม่สามารถแสดงให้เห็นได้อย่างชัดเจนใน regex มันสามารถใช้ได้ในไวยากรณ์ที่ไม่มีบริบทหรือไม่?
165
regex
roman-numerals