从this问题开始,我在扩展我的正则表达式时出现问题,现在看起来像这样:
String pattern= "(?:I[XV]|X[LC]|C[DM]|[XVLCDM])+";
String test="XM";
System.out.println(test.matches(pattern));
我的字符串中允许的字符是IVXLCDMAQT
XM目前返回true。但它不应该因为X只能在L或C之前。我如何修改我当前的正则表达式以防止XM返回true并且我的字符串中还有允许的字符?
根据要求更新: 优先权:
我只能跟随X或V,X只能跟随L或C,C只能跟着D或M.其余的字母都不重要。
因此XM应该返回false。但是,目前它并没有
答案 0 :(得分:2)
如果我了解您的要求,我们需要从最后的更改中删除X
和C
,并添加一些前瞻:
^(?:I(?=[XV])|X(?=[LC])|C(?=[DM])|[VLDM])+$
选项:允许I,X和Cat结束字符串
如果你想在字符串的末尾允许I,X或C,请添加:| [IXC] $(几种方法之一)
正则表达式成为:
(?:I(?=[XV])|X(?=[LC])|C(?=[DM])|[VLDM]|[IXC]$)+