Ответ 1
Если реализация регулярного выражения поддерживает прогнозные или прогнозные утверждения, вы можете использовать следующее:
-
Использование отрицательного ожидания:
\b(?!(?:cat|dog|sheep)\()\w+\(
-
Использование отрицательного внешнего вида:
\b\w+\((?<!\b(?:cat|dog|sheep)\()
Я добавил якорь \b
, который отмечает границу слова. Таким образом, catdog(
будет сопоставлен, хотя он содержит dog(
.
Однако, хотя утверждения с открытым исходным кодом более широко поддерживаются реализациями регулярных выражений, регулярное выражение с утверждением look-behind более эффективно, поскольку оно проверено только в том случае, если предыдущее регулярное выражение (в нашем случае \b\w+\(
) уже соответствовало. Однако прогнозное утверждение будет проверено до соответствия фактическому регулярному выражению. Таким образом, в нашем случае утверждение с перспективой проверяется всякий раз, когда \b
сопоставляется.