我见过类似的问题,但不完全相同:我的问题是我想为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/