Я уверен, что это дуплекс.
Один из способов - запустить ваш паттерн с таким взглядом:
(?=\A(?s:(?!for).)*\z)
Это можно написать так в любой системе регулярного выражениявозиться с:
(?x) # turn /x mode on for commentary & spacing
(?= # lookahead assertion; hence nonconsumptive
\A # beginning of string
(?s: # begin atomic group for later quantification
# enable /s mode so dot can cross lines
(?! for ) # lookahead negation: ain't no "for" here
. # but there is any one single code point
) # end of "for"-negated anything-dot
* # repeat that group zero or more times, greedily
\z # until we reach the very end of the string
) # end of lookahead
Теперь просто поместите это перед вашим шаблоном и добавьте все остальное, что вы хотели бы после слов.Вот как вы выражаете логику !/for/ && ⋯
, когда вам необходимо встроить такие знания в шаблон.
Это похоже на то, как вы строите /foo/ && /bar/ && /glarch/
, когда вам нужно поместить его в один шаблон, который является
(?=\A(?s:.)*foo)(?=\A(?s:.)*bar)(?=\A(?s:.)*glarch)