Вы получаете эти совпадения, потому что отрицательный взгляд (?!java)
утверждает, что то, что прямо справа, не является java.
Это ложно, когда позиция находится прямо перед java.lang.Assertion
, поэтому не совпадает.
Но затем, переходя к j
, утверждение верно, потому что справа теперь ava.lang.Assertion
, так что будет совпадать.
Одним из вариантов может быть совпадение с тем, что вы не хотите продолжать использовать (*SKIP)(*FAIL)
. Затем сопоставьте то, что вы хотите сохранить.
\bjava(?:\.\w+)+(*SKIP)(*FAIL)|(?<!/)\b\w+(?:\.\w+)+
Это будет соответствовать
\bjava(?:\.\w+)+(*SKIP)(*FAIL)
Шаблон, соответствующий тому, что вы не хотите сохранять
|
или
(?<!/)
Отрицательный взгляд сзади, утверждаю, что слева не косая черта
\b\w+(?:\.\w+)+
Шаблон, которому вы хотите соответствовать, начиная с границы слова
Regex demo | Php demo