आप इसके लिए निम्न regex का उपयोग कर सकते हैं:
^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
इसे तोड़कर, M{0,4}
हजारों खंड को निर्दिष्ट करता है और मूल रूप से इसके बीच में 0
और इसे नियंत्रित करता है 4000
। यह अपेक्षाकृत सरल है:
0: <empty> matched by M{0}
1000: M matched by M{1}
2000: MM matched by M{2}
3000: MMM matched by M{3}
4000: MMMM matched by M{4}
तुम्हें पता है, ज़ाहिर है, कुछ की तरह इस्तेमाल कर सकते हैं M*
अनुमति देने के लिए किसी भी हजारों की (शून्य सहित), अगर आप बड़ी संख्या की अनुमति देना चाहते संख्या।
अगला (CM|CD|D?C{0,3})
, थोड़ा और अधिक जटिल है, यह सैकड़ों अनुभागों के लिए है और सभी संभावनाओं को शामिल करता है:
0: <empty> matched by D?C{0} (with D not there)
100: C matched by D?C{1} (with D not there)
200: CC matched by D?C{2} (with D not there)
300: CCC matched by D?C{3} (with D not there)
400: CD matched by CD
500: D matched by D?C{0} (with D there)
600: DC matched by D?C{1} (with D there)
700: DCC matched by D?C{2} (with D there)
800: DCCC matched by D?C{3} (with D there)
900: CM matched by CM
तीसरा, (XC|XL|L?X{0,3})
पिछले अनुभाग के समान नियम लेकिन दसियों स्थान के लिए निम्न प्रकार है:
0: <empty> matched by L?X{0} (with L not there)
10: X matched by L?X{1} (with L not there)
20: XX matched by L?X{2} (with L not there)
30: XXX matched by L?X{3} (with L not there)
40: XL matched by XL
50: L matched by L?X{0} (with L there)
60: LX matched by L?X{1} (with L there)
70: LXX matched by L?X{2} (with L there)
80: LXXX matched by L?X{3} (with L there)
90: XC matched by XC
और अंत में, (IX|IV|V?I{0,3})
इकाइयों अनुभाग, हैंडलिंग है 0
के माध्यम से 9
और इसने पिछले दो वर्गों (रोमन अंकों, उनके प्रतीयमान weirdness के बावजूद, कुछ तार्किक नियमों का पालन एक बार आप यह पता लगाने के लिए वे क्या कर रहे हैं) के लिए इसी तरह:
0: <empty> matched by V?I{0} (with V not there)
1: I matched by V?I{1} (with V not there)
2: II matched by V?I{2} (with V not there)
3: III matched by V?I{3} (with V not there)
4: IV matched by IV
5: V matched by V?I{0} (with V there)
6: VI matched by V?I{1} (with V there)
7: VII matched by V?I{2} (with V there)
8: VIII matched by V?I{3} (with V there)
9: IX matched by IX
बस ध्यान रखें कि रेगेक्स एक खाली स्ट्रिंग से भी मेल खाएगा। यदि आप यह नहीं चाहते (और आपका रेगेक्स इंजन पर्याप्त आधुनिक है), तो आप सकारात्मक लुक-बैक और लुक-फॉरवर्ड का उपयोग कर सकते हैं:
(?<=^)M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})(?=$)
(सिर्फ दूसरा विकल्प होने की जाँच करें कि लंबाई पहले से शून्य नहीं है)।