排除之间的正则表达式

时间:2018-08-29 15:44:15

标签: regex

我有以下正则表达式:

first.*(?<!.*([;,\.]|and).*)second

我希望它符合以下条件:

first some word second

但不符合以下条件:

first . some word second

first ; some word second

它正在运行,但也排除了以下内容:

blah ; first some word second

如果否定的前瞻落在两个单词之间,我只希望它排除匹配项。它不应出现在第一个单词的后面。

2 个答案:

答案 0 :(得分:1)

您可以简单地使用:

first\b[^.;]*\bsecond

答案 1 :(得分:0)

首先,您没有使用前瞻,而是在图案中使用了内部具有未知宽度图案的后向。您要匹配ab之间的字符串(不包括c,这是tempered greedy token的常见情况:

first(?:(?!and)[^;,.])*second

请参见regex demo。使用单词边界匹配整个单词:\bfirst\b(?:(?!\band\b)[^;,.])*\bsecond\b

详细信息

  • first-文字子字符串
  • (?:(?!and)[^;,.])*-除;,.以外的零个或多个不开始and字符序列的字符
  • second-文字子字符串。