用于检测特定查询的正则表达式

时间:2008-12-26 14:48:34

标签: php regex

我想知道你是否有人可以构建一个正则表达式,可以检测一个人是否搜索“site:cnn.com”或“site:www.globe.com.ph/”之类的内容。我一直在努力解决这个问题。非常感谢提前!

编辑:抱歉忘记提及我的脚本是用PHP编写的。

4 个答案:

答案 0 :(得分:1)

好的,对于输入到任意文本字段,可以使用以下简单的内容:

\bsite:(\S+)

其中括号将捕获他们尝试搜索的任何网站/域。它不会将其验证为有效,但验证网址/域是复杂的,并且有很多容易使用的可复制的正则表达式,例如,有一个here

答案 1 :(得分:0)

你有什么对抗?引用网址?

假设您正在匹配看起来像这样的引用网址:

http://www.google.com/search?client=safari&rls=en-us&q=whatever+site:foo.com&ie=UTF-8&oe=UTF-8
像这样的正则表达式可以解决这个问题:

\bsite(?:\:|%3[aA])(?:(?!(?:%20|\+|&|$)).)+

注意:

  • 'site'之后的冒号可以是未编码的,也可以是百分比编码。大多数用户代理会将其保留为未编码(我认为这实际上与标准相反),但这将处理两者
  • 我假设网站:...网址是由空格字符,字段结尾(&)或字符串结尾($)
  • 的右边界限
  • 我没有假设x-www-form-urlencoded编码(空格=='+')或用百分比编码的空格(空格==%20)。这将处理两个
  • (?:...)是非捕获组。 (?!...)是一个消极的前瞻。

答案 2 :(得分:0)

不,不是推荐人网址。我的PHP脚本基本上吐出有关域的信息(例如反向链接,pagerank等),我需要该正则表达式,以便它知道用户正在搜索什么。如果用户输入的内容与正则表达式不匹配,则会进行常规的Web搜索。

答案 3 :(得分:0)

如果这是你要做的全部,我想我会采取更简单的方法而且只是这样做:

$entry = $_REQUEST['q'];
$tokens = split(':', trim($entry));
if (1 < count($tokens) && strtolower($tokens[0]) == 'site')
  $site = $tokens[1];