如何将有效的罗马数字与正则表达式匹配?思考我的另一个问题,我决定我甚至不能创建一个与罗马数字相匹配的正则表达式(更不用说生成它们的上下文无关语法了)。问题是只匹配有效的罗马数字。990不是“XM”,而是“CMXC”我在做这个正则表达式时的问题是,为了允许或不允许某些字符,我需要回顾一下。例如,让我们以成千上万的人为例。我可以允许M{0,2}?m(允许900,1000,1900,2000,2900和3000)。但是,如果匹配在CM上,我不能允许下面的字符是C或D(因为我已经在900了)。我该如何用regex来表达这一点呢?如果它在正则表达式中是不可表达的,那么它是否可以用上下文无关的语法来表示呢?
3 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
0
1
V
, L
D
:
(M{1,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|C?D|D?C{1,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|X?L|L?X{1,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|I?V|V?I{1,3}))
^
$
the Red Seacl and the Great Barrier Reefcli
Tahiti
fantastic
Tahit
fantasti
.
- 3 回答
- 0 关注
- 2196 浏览
添加回答
举报
0/150
提交
取消