一个 preg_match() 中的正面和负面正则表达式?

Positive and negative Regular Expression in one preg_match()?

我想将正则表达式和负正则表达式放在一个 preg_match() 中。这可能吗?

我使用这些 if 条件。

if ( preg_match('/bot|crawler|spider|/i', $user_agent) )
{
            if ( preg_match('/google|duckduck|yandex|baidu|yahoo|/i', $user_agent) )
            {
                $post['url'] = $url;
            }
            else
            {
                // nothing
            }
}

并想将代码简化为只有一个 preg_match ...类似这些

if ( preg_match('/bot|crawler|spider|/^(?!/google|duckduck|yandex|baidu|yahoo|/).i', $user_agent) )
      
   $post['url'] = $url;

}

但它不是那样工作的

如果你想确保 'bot' 这个词在任何地方都存在,而 'google' 这个词在任何地方都不存在(在 'bot' 之前或之后),你可以使用 positive 和负前瞻在一起。

if (preg_match('/^(?=.*(bot|crawler|spider))(?!.*(google|duckduck|yandex|baidu|yahoo)).*/i', $user_agent)) {