java - 生成一个 Java 可用的正则表达式,在精确位置否定单词

标签 java regex regex-lookarounds

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

相关文章:

Java 的 System.getRuntime().exec 表现得不像 shell 用户调用它

java - 如何将可点击的文本插入到 JTextPane 中?

python - 正则表达式 - 选择单引号之间的表达式

java - 用于捕获特定数字的正则表达式

java - 在 jGraphX 图形编辑器中拖放一组单元格

java - 继承中的静态方法

xml - 正则表达式\p{L} 和\p{N}

ruby - 使用正则表达式将数字更改为字符

java - 除非出现两次,否则如何匹配字符的任何出现?

正则表达式:替换已知固定字符串以外的任何字符串? (用引号分隔)