2005年11月07日

 本文采用的是意译;本译文已经征得作者许可;本译文可任意转载,请保留本文的头信息

    注意:文中[]符号是为了突出关键词,在实际搜索中是不包含的;本文采用的是意译;本译文已经征得作者许可;本译文可任意转载,请保留本文的头信息

  1. 双引号可以用减号代替,比如搜索["like this"]与搜索[like-this]是一个效果

  2. Google不会处理一些特殊的字符,比如[#](几年前还不行,现在可以了,比如搜索[c#]已经可以搜到相应的结果),但是还有一些字符它不认识,比如搜索[t.]、[t-]与[t^]的结果是一样的

  3. Google充许一次搜索最多32个关键词

  4. 在单词前加~符号可以搜索同义词,比如你想搜索[house],同时也想找[home],你就可以搜索[~house]

  5. 如果想得到Google索引页面的总数,可以搜索[* *]

  6. Google可以指定数字范围搜索。搜索[2001..2005]相当于搜索含有2001、2002直到2005的任意一个数的网页

  7. 搜索[define:css]相当于搜索css的定义,这招对想学习知识的人很有效;也可以用[what is css]搜索;对中文来说,也可以用[什么是css]之类的

  8. Google有一定的人工智能,可以识别一些简单的短语如[whenwas Einstein born?]或[einstein birthday]

  9. 通过[link:]语法,可以寻找含有某个链接的网页,比如[link:blog.outer-court.com]将找到包括指向 blog.outer-court.com超级链接的网页(最新的Google Blog Search也支持这个语法),但是Google并不会给出所有的包含此链接的网页,因为它要保证pagerank算法不被反向工程(呵呵,可以参见那两个Google创始人关于pagerank的论文,可下载)

  10. 如果在搜索的关键词的最后输入[why?],就会在结果中出现链接到Google Answers的链接http://answers.google.com ,在里面可以进行有偿提问

  11. 现在出现了一种兴趣活动,叫做Google Hacking,其内容是使用Google搜索一些特定的关键词,以便找到有漏洞的、易被黑客攻击的站点。这个网站列出了这些关键词:Google Hacking Database( http://johnny.ihackstuff.com/index….ule=prodreviews )

12. 在Google 中输入一组关键词时,默认是“与”搜索,就是搜索包含有所有关键词的网页。如果要“或”搜索,可以使用大写的[OR]或 [|],使用时要与关键词之间留有空格。比如搜索关键词[Hamlet (pizza | coke)],是让Google搜索页面中或页面链接描述中含有Hamlet,并含有pizza与coke两个关键词中任意一个的网页。

  13. 并非所有的Google服务都支持相同的语法,比如在Google Group中支持 [insubject:test]之类的主题搜索。可以通过高级搜索来摸索这些关键词的用法:进入高级搜索之后设置搜索选项,然后观察关键字输入窗口中的关键字的变化

  14. 有时候Google懂得一些自然语言,比如搜索关键词[goog], [weather new york, ny], [new york ny]或[war of the worlds],此时Google会在搜索结果前显示出一个被业内称为“onebox”的结果,试试看吧!

  15. 并非所有的Google都是相同的,它因国家版本(或是说语言版本)而异。在US版下,搜索[site:stormfront.org]会有成千上万的结果,而在德语版下,搜索[site:stormfront.org]的结果,嗯,自己看吧。Google的确与各国政府有内容审查协议,比如德国版,法国版(网页搜索),中国版Google新闻

  16. 有时候Google会提示你搜索结果很烂,比如你搜索关键词[jew]试试,Google会告诉你它给出的搜索结果很烂,然后给你一个解释:http://www.google.com/explanation.html

  17. 以前,搜索某些关键词如[work at Google] 时会看到Google给自己打的广告。可以去http://www.google.com/jobs/了解Google的工作

  18. 对于一些“Googlebombed”(大概意思是指Google搜索的结果出问题了)的关键词,会有一个广告链接到:http: //googleblog.blogspot.com/2005/09/googlebombing-failure.html (中国大陆需要代理才能访问)。比如搜索[failure],第一条是美国布什总统介绍

  19. 虽然现在Google还没有支持自然语言,但这里有一段录像显示了支持自然语言的搜索引擎的使用效果:http://blog.outer-court.com/videos/googlebrain.wmv

  20. 有人说在Google中搜索[president of the internet],其结第一条表明了president of the internet是谁,我也是这么认为的,而且你还可以使用这个logo支持本文作者:http://blog.outer- court.com/files/president.gif

  21. Google现在不再有“stop words”(被强制忽略的关键词),比如搜索 [to be or not to be], Google返回的结果中间还列有相关的完整短语搜索结果

  22. 在Google 计算器(http://www.google.com/help/features.html#calculator )中有个彩蛋:输入[what is the answer to life, the universe and everything?]时,会返回42。(关键词翻译过来的意思是指“生命、宇宙和一切的答案”,这是一个著名科幻小说中的情节,详情参见http: //en.wikipedia.org/wiki/The_Answer_to_Life,_the_Universe, _and_Everything)。试试吧,哈哈

  23. 你可以在搜索时使用通配符[*],这在搜索诗词时特别有效。比如你可以搜一下["love you twice as much * oh love * *"] 试试

  24. 同样,你的关键词可以全部都是通配符,比如搜索["* * * * * * *"]

  25. www.googl.com是在输错网址后的结果,也是个搜索网站,但搜索结果与Google完全不同。而且此网站也赚Google的钱,因为它使用Google AdSense

  26. 如果你想把搜索结果限制在大学的网站之中,可以使用[site:.edu]关键词,比如[c-tutorial site:.edu],这样可以只搜索以edu结尾的网站。你也可以使用Google Scholar来达到这个目的。也可以使用[site:.de]或[site:.it]来搜索某个特定国家的网站12. 在Google 中输入一组关键词时,默认是“与”搜索,就是搜索包含有所有关键词的网页。如果要“或”搜索,可以使用大写的[OR]或 [|],使用时要与关键词之间留有空格。比如搜索关键词[Hamlet (pizza | coke)],是让Google搜索页面中或页面链接描述中含有Hamlet,并含有pizza与coke两个关键词中任意一个的网页。

虽然现在获得一个Gmail已经不是什么难为的事情了,不过老是要经别人邀请才能得到,这也许会令一些相对较懒的朋友不太愉快。 
    现在我们发现了一个便捷申请Gmail帐号的方法,通过一个网站,我们可以无限制地申请Gmail帐号,而无需别人的邀请。
    申请步骤:

    1. 登陆http://www.bytetest.com/网站,就会看到下图的页面,如果你运气好,会在"Enter the code above to get a gmail account"这句话上面看到几个英文代码(如果看不到可以刷新几次)。



刷新后得到代码


    2. 接下来你将得到的代码输入到下方"Get Gmail"前面的输入框中,然后点击"Get Gmail"。

    3. 到这里已经大功告成了,我们已经来到了创建 Google 帐户的页面。在这里填入你的个人资料即可成功申请Gmail了。


成功申请了!


    除了大容量的诱惑以外,接下来你想不想用Gmail来聊天?快去下载一个属于Google的即时聊天软件Google Talk吧!现在已经有了汉化版,可以让你轻松使用,体积只有2.17MB。
[点击下载]
发表于 2005-11-04 15:56
  [前言:]在我们编写WEB程序时,经常会判断一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。如果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作了。本文全面介绍正则表达式的慨念、格式。并以在PHP、ASP中的应用实例增加读者的感性认识。正则表达式的应用很广,需要大家在学习和实践中不断的总结。

  正则表达式简介 

  简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。在网络编程中应用广泛,如PHP脚本语言或是JavaScript、 VBScript这样的客户端脚本语言都提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。 

  正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。 

  举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确,如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。在后面我们会举例详细介绍。 

  正则表达式形式一般如:/love/,其中位于 "/"定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入"/"定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的"元字符"。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。较为常用的元字符包括: "+,"*,?以及{}",或者"\s,\S,\d,\w和\W"等等。为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中利用[]界定匹配于某一个范围的字符而不局限于具体的字符。 

  除了我们以上的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。较为常用的定位符包括: "^", "$", "\b" 以及 "\B"。 

  如果我们希望在正则表达式中实现类似编程逻辑中的"或"运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 "|"。例如: 

  正则表达式中还有一个较为常用的运算符,即否定符 "[^]"。与我们前文所提到的定位符 "^" 不同,否定符 "[^]"规定目标对象中不能存在模式中所规定的字符串。一般来说,当"^"出现在 "[]"内时就被视做否定运算符;而当"^"位于"[]"之外,或没有"[]"时,则应当被视做定位符。  

  最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符"\"。例如:/Th\*/,该正则表达式将会与目标对象中的"Th*"而非"The"等相匹配。 

  正则表达式的语法规则和标记

  现在我们正式进入则表达式的学习,我会根据实例结合讲解正则表达式的用法,看完后你就会觉得写UBB代码如此简单了,只要你一步一步的跟着我学 看完本文章后你就成为UBB高手了。激动人心的就是你能写出自已的UBB标签来了,再也不用到别人那里去拷贝现成的代码和模板了。 还好VBScritp5.0 给我们提供了"正则表达式"对象,只要你的服务器安装了IE5.x,就可以运行了.

  字符描述:

     ^符号匹配字符串的开头。例如:

    ^abc 与"abc xyz"匹配,而不与"xyz abc"匹配

  $符号匹配字符串的结尾。例如:

    abc$ 与"xyz abc"匹配,而不与"abc xyz"匹配。

    注意:如果同时使用^符号和$符号,将进行精确匹配。例如:

       ^abc$ 只与"abc"匹配   

  *符号匹配0个或多个前面的字符。例如:

    ab* 可以匹配"ab"、"abb"、"abbb"等

  +符号匹配至少一个前面的字符。例如:

    ab+ 可以匹配"abb"、"abbb"等,但不匹配"ab"。 

  ?符号匹配0个或1个前面的字符。例如:

    ab?c? 可以且只能匹配"abc"、"abbc"、"abcc"和"abbcc"

  .符号匹配除换行符以外的任何字符。例如:

    (.)+ 匹配除换行符以外的所有字符串

  x|y匹配"x"或"y"。例如:

    abc|xyz 可匹配 "abc"或 "xyz",而"ab(c|x)yz"匹配 "abcyz"和"abxyz"

  {n}匹配恰好n次(n为非负整数)前面的字符。例如:

    a{2} 可以匹配"aa",但不匹配"a"

  {n,}匹配至少n次(n为非负整数)前面的字符。例如:

    a{3,} 匹配"aaa"、"aaaa"等,但不匹配"a"和"aa"。

    注意:a{1,}等价于a+

       a{0,}等价于a*

  {m,n}匹配至少m个,至多n个前面的字符。例如:

    a{1,3} 只匹配"a"、"aa"和"aaa"。

    注意:a{0,1}等价于a?

  [xyz]表示一个字符集,匹配括号中字符的其中之一。例如:

    [abc] 匹配"a"、"b"和"c"

  [^xyz]表示一个否定的字符集。匹配不在此括号中的任何字符。例如:

    [^abc] 可以匹配除"a"、"b"和"c"之外的任何字符

  [a-z]表示某个范围内的字符,匹配指定区间内的任何字符。例如:

    [a-z] 匹配从"a"到"z"之间的任何一个小写字母字符

  [^m-n]表示某个范围之外的字符,匹配不在指定范围内的字符。例如:

    [m-n] 匹配除从"m"到"n"之间的任何字符

  \符号是转义操作符。例如:

    \n 换行符

    \f 分页符

    \r 回车

    \t 制表符

    \v 垂直制表符 

    \\ 匹配"\"

    \/ 匹配"/"

    \s 任何白字符,包括空格、制表符、分页符等。等价于"[ \f\n\r\t\v]"

    \S 任何非空白的字符。等价于"^\f\n\r\t\v]"

    \w 任何单词字符,包括字母和下划线。等价于"[A-Za-z0-9_]"

    \W 任何非单词字符。等价于"[^A-Za-z0-9_]"

    \b匹配单词的结尾。例如:

      ve\b 匹配单词"love"等,但不匹配"very"、"even"等

    \B匹配单词的开头。例如:

      ve\B 匹配单词"very"等,但不匹配"love"等

    \d匹配一个数字字符,等价于[0-9]。例如:

      abc\dxyz 匹配"abc2xyz"、"abc4xyz"等,
      但不匹配"abcaxyz"、"abc-xyz"等

    \D匹配一个非数字字符,等价于[^0-9]。例如:

      abc\Dxyz 匹配"abcaxyz"、"abc-xyz"等,
      但不匹配"abc2xyz"、"abc4xyz"等

    \NUM匹配NUM个(其中NUM为一个正整数),引用回到记住的匹配。例如:

      (.)\1 匹配两个连续相同的字符。 

    \oNUM匹配n(其中n为一个小于256的八进制换码值)。例如:

      \o011 匹配制表符

    \xNUM匹配NUM(其中NUM为一个小于256的十六进制换码值)。例如:

      \x41 匹配字符"A"

 
  应用实例 

  在对正则表达式有了较为全面的了解之后,就可以在Perl,PHP,以及ASP等程式中使用正则表达式了。

  下面以PHP语言为例,使用验证用户在线输入的邮件地址以及网址的格式是否正确。PHP 提供了eregi()或ereg()资料处理函数实现字串比对剖析的模式匹配操作ereg()函数的使用格式如下: 

      ereg (pattern, string) 

  其中,pattern代表正则表达式的模式;而string则是执行查找替换操作的目标对象,如Email地址值。本函式以 pattern 的规则来剖析比对字串 string,找到则传回值为 true。函式ereg()与eregi()的区别就是前者区分大小写,后者与大小写无关。使用PHP编写的程序代码如下: 

     <?php 
   if (ereg("^([a-z0-9_-])+@([a-zZ0-9_-])+(\.[a-z0-9_-])+[a-z]{2,3}$",$email)) 
   { echo "您的 E-Mail 通过初步检查!";} 
   else 
   { echo "不是合法的E-Mail 地址,请重新输入!";} 
   ?> 
 

  这个例子是可对使用者输入的 E-Mail 作简单的检查,检查使用者的 E-Mail 字串是否有 @ 字元,在 @ 字元前有小写英文字母、数字或下"_",在 @ 之后有数节字串,最后的小数点后只能有二个或三个小写英文字母。如webmaster@mail.sever.net,  hello_2001@88new.cn就可以通过检查,而New99@253.com(出现大写字母)和new99@253.comn(最后的小数点后只能超过3个英文字母)就不能通过检查。 

  我们通过调用自定义正规则判别函式也可以进行检查操作,如下面的网址检验函式: 

function VerifyWebSiteAddr ($strWebSiteAddr){ 
return (eregi ("^([_0-9a-z-]+.)+([0-9a-z-]+.)+[a-z]{2,3}$", $strWebSiteAddr)); 

  我们知道,PHP程式的运行必须有服务器支持,如果您在自己的主页上想实现以上功能, 嵌入式脚本语言Javascript或许是好的选择。 JavaScript中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。只须在HTML文档的<head>区域添加一段Javascript代码。 

< language="Javascript1.2"> 
  function verifyAddress(obj){ 
   var email = obj.email.value; 
   var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/; 
   flag = pattern.test(email); 
   if(flag){ 
    alert("您的 E-Mail 通过初步检查!"); 
    return true;} 
   else{ 
    alert("不是合法的E-Mail 地址,请重新输入!"); 
    return false;} 
  } 
 </script> 
 

  然后在网页中输入信息的表单域<form>标签区域内中加入一行如下代码: 

   <onSubmit="return verifyAddress(this);"> 

  当按下提交按钮后,首先运行verifyAddress()函式,进行匹配识别,如果满足条件则发送表单信息到目标页面,否则返回错误信息。