多个字符的正则表达式优先级

时间:2014-07-14 12:38:20

标签: java regex operator-precedence

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。但是,目前它并没有

1 个答案:

答案 0 :(得分:2)

如果我了解您的要求,我们需要从最后的更改中删除XC,并添加一些前瞻:

^(?:I(?=[XV])|X(?=[LC])|C(?=[DM])|[VLDM])+$

选项:允许I,X和Cat结束字符串

如果你想在字符串的末尾允许I,X或C,请添加:| [IXC] $(几种方法之一)

正则表达式成为:

(?:I(?=[XV])|X(?=[LC])|C(?=[DM])|[VLDM]|[IXC]$)+