一个 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)) {
我想将正则表达式和负正则表达式放在一个 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)) {