我有以下正则表达式:
first.*(?<!.*([;,\.]|and).*)second
我希望它符合以下条件:
first some word second
但不符合以下条件:
first . some word second
first ; some word second
它正在运行,但也排除了以下内容:
blah ; first some word second
如果否定的前瞻落在两个单词之间,我只希望它排除匹配项。它不应出现在第一个单词的后面。
答案 0 :(得分:1)
您可以简单地使用:
first\b[^.;]*\bsecond
答案 1 :(得分:0)
首先,您没有使用前瞻,而是在图案中使用了内部具有未知宽度图案的后向。您要匹配a
和b
之间的字符串(不包括c
,这是tempered greedy token的常见情况:
first(?:(?!and)[^;,.])*second
请参见regex demo。使用单词边界匹配整个单词:\bfirst\b(?:(?!\band\b)[^;,.])*\bsecond\b
。
详细信息
first
-文字子字符串(?:(?!and)[^;,.])*
-除;
,,
和.
以外的零个或多个不开始and
字符序列的字符second
-文字子字符串。