我见过类似的问题,但不完全相同:我的问题是我想为311个字符的字符串生成Java可用的正则表达式,而该字符串在精确位置上没有某些字符:

直观的解决方案是这样的:

(.{104})(^OM)M(.{204})


但是我知道,如果我必须否定整个单词,则必须提前使用:

(.{104})(?:(?!OM))M(.{204})


此RE均无效。

有想法吗?

请记住,仅当字符串的位置105和106与“ OM”不同且位置107等于“ M”时,正则表达式才必须匹配。

是的,我只能使用正则表达式执行此操作,是的,我不能同时使用^$

最好的祝福。

最佳答案

我不会在此任务中使用正则表达式。只需使用String API即可完成工作:

str.length() == 311 && !str.substring(104, 106).equals("OM") && str.charAt(106) == 'M'


如果只想使用正则表达式,则必须稍微修改一下正则表达式。您正在使用负向后检查来检查OM,但忽略了接下来的2个字符。如果它们不是OM,则实际上您需要匹配它们:

(.{104})(?:(?!OM)..)M(.{204})

关于java - 生成一个Java可用的正则表达式,以否定精确位置的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20151073/

10-10 16:54