放入 if 子句时负正则表达式环视如何工作?

How does negative regex lookaround works when put in if clause?

我正在尝试使用正则表达式捕获组和环视来匹配序列中特定单词的所有实例,但前提是它没有被 & 和 ; 包围。符号(即我不想从 &word; 捕获 word,但我从 &wordword; 捕获)。

我写了一个正则表达式,我认为它可以满足我的需要,但它并没有——我在 if 子句中放入的负面环视似乎只使第一组不匹配,而不是整个匹配。

(&[^;&]*)?(amp)(?(1)(?!;))

在这个字符串上使用时:>amp; &amp; amp &amp; &amp< 我预计只有第一、第三和第五个安培会被匹配,因为消极的环视,但出乎意料的是,所有的安培都被匹配,只有 &'s 被排除在后跟;.

https://regex101.com/r/ilAAVb/1

我是不是犯了一些明显的错误,或者 if 子句中的环顾四周仅适用于该子句正在检查的组?

编辑:更正了我需要从句子中提取的内容。

也许不是最优雅的,但这个有效:

(&\b\w+\b(?!;)|(?<!&)\b\w+\b(?!;)|(?<!&)\b\w+\b;)

(&\b\w+\b(?!;) 开始时 & 但结束时 ; 没有

(?<!&)\b\w+\b(?!;) 因为开始时没有 & 并且结束时没有 ;

(?<!&)\b\w+\b;) 开始时没有 & 但结束时 ;

使用(*FAIL)(*SKIP)动词,尝试匹配&word;,如果找到,丢弃匹配然后尝试匹配amp

&.+?;(*SKIP)(*FAIL)|amp

Demo & explanation