我见过类似的问题,但不完全相同:我的问题是我想为 311 个字符的字符串生成一个 java-usable 正则表达式,该字符串在精确位置上没有某些字符:
直观的解决方案是这样的:
(.{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/