首页 > 解决方案 > 除了前面没有字符串的特定字符之外的所有内容的正则表达式

问题描述

我很不幸将一个正则表达式构建在一起,除了一个特定的字符之外没有特定的字符串。

例如这个字符串:

Mr. Jones likes fish.

应该像这样匹配:

Mr. Jones likes fish

而不是例如:

Mr

我认为这应该很容易,但它只是行不通。我已经让它在点上获得正确的匹配:

(?<!Mr)\.

互补匹配将不起作用。我试过这个:

(?<!Mr)[^.]*

因为我认为光标会在那一点上,并看到它是由“先生”处理的,它不会匹配。但确实如此。

像这样的东西:

(^((?<!Mr).))*

但是该正则表达式中的后视不再被识别为一个,它只是尝试匹配每个字符。

我已经看到了这个答案,但我在那里找不到任何帮助我的东西。

标签: javaregex

解决方案


在我看来,除了.句点前面有例外之外,您希望匹配任何字符,Mr以便您可以使用交替 (或可选组)和后视

(?:[^.]+|(?<=Mr)\.)+

作为 Java 字符串:"(?:[^.]+|(?<=Mr)\\.)+"

这是 regex101 的演示(非 Java)


推荐阅读