이번에 영문문서대응 작업때문에 로마숫자의 점검용 코드를 줃었다.;;;(머리싸매서 하는것도 좋지만 시간대비 효용이..)
로마숫자에 대한 개요는 이걸 참조하고..
Roman
Alternative
Arabic
Notes
없음
없음
0
0을 표시할 수 없음.
I
Ⅰ
1
II
ⅠⅠ (or Ⅱ)
2
III
ⅠⅠⅠ (or Ⅲ)
3
IV
ⅠⅤ (or Ⅳ)
4
시계 문자판 등에서는 IIII (ⅠⅠⅠⅠ)이 쓰임.
V
Ⅴ
5
VI
ⅤⅠ (or Ⅵ)
6
VII
ⅤⅠⅠ (or Ⅶ)
7
VIII
ⅤⅠⅠⅠ (or Ⅷ)
8
IX
ⅠⅩ (or Ⅸ)
9
X
Ⅹ
10
XI
ⅩⅠ (or Ⅺ)
11
XII
ⅩⅠⅠ (or Ⅻ)
12
XIII
ⅩⅠⅠⅠ
13
XIV
ⅩⅠⅤ
14
XV
ⅩⅤ
15
XIX
ⅩⅠⅩ
19
XX
ⅩⅩ
20
XXX
ⅩⅩⅩ
30
XL
ⅩⅬ
40
L
Ⅼ
50
LX
ⅬⅩ
60
LXX
ⅬⅩⅩ
70
LXXX
ⅬⅩⅩⅩ
80
XC
ⅩⅭ
90
C
Ⅽ
100
미국의 100달러 지폐를 "C-bill"이나 "C-note"라고 부르는 연유이다.
CC
ⅭⅭ
200
CD
ⅭⅮ
400
D
Ⅾ
500
IↃ또는 1000 표기의 절반이란 의미에서 유래.
DCLXVI
ⅮⅭⅬⅩⅤⅠ
666
짐승의 수에는 M 이외의 다른 모든 기본 부호가 한번씩 나타난다.
CM
ⅭⅯ
900
M
Ⅿ
1000
예전엔 ↀ을 쓰기도 했다.
MCMXLV
ⅯⅭⅯⅩⅬⅤ
1945
MCMXCIX
ⅯⅭⅯⅩⅭⅠⅩ
1999
IMM (ⅠⅯⅯ)이나 MIM (ⅯⅠⅯ)으로 줄여서 쓸 수 없다.
MM
ⅯⅯ
2000
MMM
ⅯⅯⅯ
3000
ↁ
ⅠↃↃ
5000
I 뒤에 C를 두번 거꾸로 쓴 모양.
이 모든걸 점검할 수 있는 식이
^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
이다.
위의 코드중 특수문자에서 대응되는 범위는 1-10까지이다.
ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ (일본어 비스타 폰트는 12까지 지원)
시간나면 컨버터도 만들어야겠다..
참고자료 :
http://ko.wikipedia.org/wiki/%EB%A1%9C%EB%A7%88_%EC%88%AB%EC%9E%90
http://diveintopython.org/regular_expressions/roman_numerals.html
http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
http://www.crowes-nest.com/CrowesNest/Library/RomanConv/roman.html
http://www.csharphelp.com/archives/archive144.html