이를 위해 다음 정규식을 사용할 수 있습니다.
^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}
물론 더 큰 숫자를 허용하려면 수천의 숫자 (0 포함) 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
이전 두 섹션 (당신은 그들이 무엇인지 파악하면 로마 숫자는, 자신의 보이는 불확실성에도 불구하고, 몇 가지 논리적 규칙을 따라야)에 유사한 :
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})(?=$)
(다른 대안은 길이가 미리 0이 아닌지 확인하는 것입니다).