周末和老婆在家看了几部电影,神枪手,非常一般;楚门的世界:挺好看;非常嫌疑犯:很不错;天水围的日与夜:很写实的一部电影;这儿是香格里拉:没看懂。
Godaddy的域名终于注册好了,用的是199domain这个优惠码,之前的99buecom已经失效,才一天呀。自从几年前买国外域名被乱扣款后,再也没用信用卡了,这次用老婆的信用卡注册的。域名注册后,auto renew已经取消,两个月后域名再转出,以防万一:)
周末和老婆在家看了几部电影,神枪手,非常一般;楚门的世界:挺好看;非常嫌疑犯:很不错;天水围的日与夜:很写实的一部电影;这儿是香格里拉:没看懂。
Godaddy的域名终于注册好了,用的是199domain这个优惠码,之前的99buecom已经失效,才一天呀。自从几年前买国外域名被乱扣款后,再也没用信用卡了,这次用老婆的信用卡注册的。域名注册后,auto renew已经取消,两个月后域名再转出,以防万一:)
昨天吃完晚饭就睡觉了,好累,5点就惊醒了,喉咙又发炎了,就因为昨天吃了个黑椒牛柳饭,太久没运动了,身体越来越不好了,看到Godaddy有0.99的玉米,赶紧去注册,结果优惠码99BUYCOM死活无效,Godaddy也没个提示,折腾了半天也不行,放弃。碗还没洗,洗碗去。
花了两天时间做的一个小应用,http://adwords.ykjsw.com/
可以通过设定关键字来监视每天google search adwords的变化,积累下来,可以看到哪些关键字容易赚钱。基本功能实现了,如果以后有需要,继续完善。
google adsense是一个很好营造额外收入的方式.不过,要google 谷歌adsense 关键是你找到了单价高的关键字,为此关键字打造网站内容.
今天我想与大家分享一些我的秘密方法,为迅速找到最高薪关键词.此外,我要与你分享一些新兴市场,你可以建立自己的网站
1 .其中最快,最容易的途径找到高价关键词的是去http://froogle.google.com/ .下面是搜索框,你会看到一个关键词列表.这是名单上的几个项目,最近搜查与表现平平. 这往往是产品名称,有很高的关键字出价.为了找到答案,仅仅去http://www.pixelfast.com/overture/开始堵在一些关键词,看看有多少人投他们.你们一定会找到一些关键词,在1 - 2美元左右,甚至更长时间.那么,当你想寻找一些额外的语句,简单新闻f5公司9100页和froogle会给你一个完全新的一套关键字研究.
我希望这有助于.这是我最喜欢的战术寻找高价关键词.
2 . ebay是一个很大的地方,寻找未开发的市场.他们从字面上
有数以千计的关键词,只等待我们去发掘.他们提供
无限次数的市场,你可以研究,在深入权拍卖.
我建议你开始你的旅程,在http://buy.ebay.com .这
是ebay的关键词.这是一个目录成千上万的高度流行用语
人们寻求拍卖.这是极为宝贵的资料,因为
这些都是关键字,有潜在利润和顾客都
愿意买.
一旦你到达http://buy.ebay.com ,你必须点击一个字母,从字母连接索引.然后,你可以浏览一些流行关键词分龛你认为可发掘.点击
该关键字,你将会被带到一个页面会给你有关
搜索和搜索的修饰.堵塞这些关键字在
http://www.pixelfast.com/overture/看看你找到.
另一种方式找到张口ebay上是去
http://keyword-index.ebay.com/a-1-77.html .这个数据库会给你一个更大的关键词列表.只花一点点时间的摸索,在这里你一定会发现一些张口高关键字出价.很多的关键词,你会发现这里也有很小的竞争.
我也想回头看
http://keyword-index.ebay.com/keyword-index.html .在这里你可以搜索
一些最热门的关键词.如果你还挖成若干条
搜索,你可以找到一些高薪关键词.
本文出自 “feixiang” 博客,请务必保留此出处http://feixiang123.blog.51cto.com/285543/75839
在twitter上每次发条内容,如果你发部的内容有url,都会有两只机器人去爬一下那个url ,而且是即时,USER-AGENT如下:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 TweetmemeBot
Chat Catcher - (http://chatcatcher.com/bot.htm)
暂时不知道他们是干什么的:(
下班了,和平时一样,坐公交车回家,幸运的是,车上的人不是特别多。车开的很快,无意间通过车窗,突然发现自己很久没有从这个角度看前方了,每天,上班,下班,车厢里,总是塞的那么满,仅能看到的,只是车窗外急速闪过的一点点景象,都还没看清,更来不急细想,就已经消失了,而前方,被那么多陌生的人挡住,根本无法看到。
到站,下车,依然是那么急匆匆的,生活,不应该是这样。
1. http://myweb2.search.yahoo.com/ PageRank: 7/10 | Alexa: 1
2. http://www.digg.com/ PageRank: 8/10 | Alexa: 80
3. http://del.icio.us/ PageRank: 8/10 | Alexa: 159
4. http://www.netscape.com/ PageRank: 9/10 | Alexa: 504
5. http://reddit.com/ PageRank: 8/10 | Alexa: 882
6. http://www.fark.com/ PageRank: 8/10 | Alexa: 1,223
7. http://www.43things.com PageRank: 7/10 | Alexa: 1,706
8. http://www.mister-wong.de/ PageRank: 6/10 | Alexa: 2,141
9. http://www.furl.net/ PageRank: 7/10 | Alexa: 3,166
10. http://www.blinklist.com/ PageRank: 6/10 | Alexa: 3,516
11. http://www.newsvine.com/ PageRank: 7/10 | Alexa: 3,681
12. http://www.blogmarks.net/ PageRank: 7/10 | Alexa: 6,016
13. http://ma.gnolia.com/ PageRank: 7/10 | Alexa: 7,117
14. http://www.simpy.com/ PageRank: 7/10 | Alexa: 10,262
15. http://www.shoutwire.com PageRank: 6/10 | Alexa: 10,105
16. http://www.spurl.net/ PageRank: 7/10 | Alexa: 11,531
17. http://bluedot.us/ PageRank: 6/10 | Alexa: 12,259
18. http://www.blinkbits.com/ PageRank: 6/10 | Alexa: 15,104
19. http://netvouz.com/ PageRank: 7/10 | Alexa: 18,760
20. http://www.trailfire.com/ PageRank: 5/10 | Alexa: 22,278
21. http://wink.com/ PageRank: 3/10 | Alexa: 22,231
22. http://www.backflip.com/ PageRank: 6/10 | Alexa: 26,605
23. http://linkagogo.com/ PageRank: 7/10 | Alexa: 45,299
24. http://de.lirio.us/ PageRank: 6/10 | Alexa: 52,009
25. http://www.blogmemes.net/ PageRank: 5/10 | Alexa: 56,592
前言
PHP被大量的应用于Web的后台CGI开发,通常是在用户数据数据之后得出某种结果,但是如果用户输入的数据不正确,就会出现问题,比如说某人的生日是”2月30日”!那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配。
2 什么是正则表达式:
简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用。
在某个Linux网站上面有这样的话:”如果你问一下Linux爱好者最喜欢什么,他可能会回答正则表达式;如果你问他最害怕什么,除了繁琐的安装配置外他肯定会说正则表达式。”
正如上面说的,正则表达式看起来非常复杂,让人害怕,大多数的PHP初学者都会跳过这里,继续下面的学习,但是PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者用指定的字符串来替代符合条件的字符串等强大的功能,不学实在太可惜了……
3 正则表达式的基本语法:
一个正则表达式,分为三个部分:分隔符,表达式和修饰符。
分隔符可以是除了特殊字符以外的任何字符(比如”/ !”等等),常用的分隔符是”/”。表达式由一些特殊字符(特殊字符详见下面)和非特殊的字符串组成,比如”[a-z0-9_-]+@[a-z0-9_-.]+”可以匹配一个简单的电子邮件字符串。修饰符是用来开启或者关闭某种功能/模式。下面就是一个完整的正则表达式的例子:
/hello.+?hello/is
上面的正则表达式”/”就是分隔符,两个”/”之间的就是表达式,第二个”/”后面的字符串”is”就是修饰符。
在表达式中如果含有分隔符,那么就需要使用转义符号”\”,比如”/hello.+?\/hello/is”。转义符号除了用于分隔符外还可以执行特殊字符,全部由字母构成的特殊字符都需要”\”来转义,比如”\d”代表全体数字。
4 正则表达式的特殊字符:
正则表达式中的特殊字符分为元字符、定位字符等等。
元字符是正则表达式中一类有特殊意义的字符,用来描述其前导字符(即元字符前面的字符)在被匹配的对象中出现的方式。元字符本身是一个个单一的字符,但是不同或者相同的元字符组合起来可以构成大的元字符。
元字符:
大括号:大括号用来精确指定匹配元字符出现的次数,例如”/pre{1,5}/”表示匹配的对象可以是”pre”、”pree”、”preeeee”这样在”pr”后面出现1个到5个”e”的字符串。或者”/pre{,5}/”代表pre出现0此到5次之间。
加号:”+”字符用来匹配元字符前的字符出现一次或者多次。例如”/ac+/”表示被匹配的对象可以是”act”、”account”、”acccc”等在”a”后面出现一个或者多个”c”的字符串。”+”相当于”{1,}”。
星号:”*”字符用来匹配元字符前的字符出现零次或者多次。例如”/ac*/”表示被匹配的对象可以是”app”、”acp”、”accp”等在”a”后面出现零个或者多个”c”的字符串。”*”相当于”{0,}”。
问号:”?”字符用来匹配元字符前的字符出现零次或者1次。例如”/ac?/”表示匹配的对象可以是”a”、”acp”、”acwp”这样在”a”后面出现零个或者1个”c”的字符串。”?”在正则表达式中还有一个非常重要的作用,即”贪婪模式”。
还有两个很重要的特殊字符就是”[ ]“。他们可以匹配”[]“之中出现过的字符,比如”/[az]/”可以匹配单个字符”a”或者”z”;如果把上面的表达式改成这样”/[a-z]/”,就可以匹配任何单个小写字母,比如”a”、”b”等等。
如果在”[]“中出现了”^”,代表本表达式不匹配”[]“内出现的字符,比如”/[^a-z]/”不匹配任何小写字母!并且正则表达式给出了几种”[]“的默认值:
[:alpha:]:匹配任何字母
[:alnum:]:匹配任何字母和数字
[:digit:]:匹配任何数字
[:space:]:匹配空格符
[:upper:]:匹配任何大写字母
[:lower:]:匹配任何小写字母
[:punct:]:匹配任何标点符号
[:xdigit:]:匹配任何16进制数字
另外下面这些特殊字符在转义符号”\”转义后代表的含义如下:
s:匹配单个的空格符
S:用于匹配除单个空格符之外的所有字符。
d:用于匹配从0到9的数字,相当于”/[0-9]/”。
w:用于匹配字母,数字或下划线字符,相当于”/[a-zA-Z0-9_]/”。
W:用于匹配所有与w不匹配的字符,相当于”/[^a-zA-Z0-9_]/”。
D:用于匹配任何非10进制的数字字符。
.:用于匹配除换行符之外的所有字符,如果经过修饰符”s”的修饰,”.”可以代表任意字符。
利用上面的特殊字符可以很方便的表达一些比较繁琐的模式匹配。例如”/\d0000/”利用上面的正则表达式可以匹配万以上,十万一下的整数字符串。
定位字符:
定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进行描述。
^:表示匹配的模式出现在匹配对象的开头(和在”[]“里面不同)
$:表示匹配的模式出现在匹配对象的末尾
空格:表示匹配的模式出现在开始和结尾的两个边界之一
“/^he/”:可以匹配以”he”字符开头的字符串,比如hello、height等等;
“/he$/”:可以匹配以”he”字符结尾的字符串即she等;
“/ he/”:空格开头,和^的作用一样,匹配以he开头的字符串;
“/he /”:空格结束,和$的作用一样,匹配以he结尾的字符串;
“/^he$/”:表示只和字符串”he”匹配。
括号:
正则表达式除了可以用户匹配,还可以用括号”()”来记录需要的信息,储存起来,给后面的表达式读取。比如:
/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/
就是记录邮件地址的用户名,和邮件地址的服务器地址(形式为username@server.com之类的),在后面如果想要读取记录下来的字符串,只是需要用”转义符+记录的次序”来读取。比如”\\1″就相当于第一个”[a-zA-Z0-9_-]+”,”\\2″相当于第二个([a-zA-Z0-9_-]+),”\\3″就是第三个(.[a-zA-Z0-9_-])。但是在PHP中,”\”是一个特殊的字符,需要转义,所以”\1″到了PHP的表达式中就应该写成”\\\\1″。
其他特殊符号:
“|”:或符号”|”和PHP里面的或一样,不过是一个”|”,而不是PHP的两个”||”!意思就是可以是某个字符或者另一个字符串,比如”/abcd|dcba/”可能匹配”abcd”或者”dcba”。
5 贪婪模式:
前面在元字符中提到过”?”还有一个重要的作用,即”贪婪模式”,什么是”贪婪模式”呢?
比如我们要匹配以字母”a”开头字母”b”结尾的字符串,但是需要匹配的字符串在”a”后面含有很多个”b”,比如”a bbbbbbbbbbbbbbbbb”,那正则表达式是会匹配第一个”b”还是最后一个”b”呢?如果你使用了贪婪模式,那么会匹配到最后一个”b”,反之只是匹配到第一个”b”。
使用贪婪模式的表达式如下:
/a.+?b/
/a.+b/U
不使用贪婪模式的如下:
/a.+b/
上面使用了一个修饰符U,详见下面的部分。
6 修饰符:
在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着”e”并不等于”E”)。正则表达式里面的修饰符如下:
i :如果在修饰符中加上”i”,则正则将会取消大小写敏感性,即”a”和”A” 是一样的。
m:默认的正则开始”^”和结束”$”只是对于正则字符串如果在修饰符中加上”m”,那么开始和结束将会指字符串的每一行:每一行的开头就是”^”,结尾就是”$”。
s:如果在修饰符中加入”s”,那么默认的”.”代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说”/a/A”匹配”abcd”。
E:与”m”相反,如果使用这个修饰符,那么”$”将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。
U:和问号的作用差不多,用于设置”贪婪模式”。
7 PCRE相关的正则表达式函数:
PHP的Perl兼容正则表达式提供的多个函数,分为模式匹配,替换和匹配数目等等:
1、preg_match :
函数格式:int preg_match(string pattern, string subject, array [matches]);
这个函数会在string中使用pattern表达式来匹配,如果给定了[regs],就会将string记录到[regs][0]中,[regs][1]代表使用括号”()”记录下来的第一个字符串,[regs][2]代表记录下来的第二个字符串,以此类推。preg如果在string中找到了匹配的pattern,就会返回”true”,否则返回”false”。
2、preg_replace :
函数格式:mixed preg_replace(mixed pattern, mixed replacement, mixed subject);
这个函数会使用将string中符合表达式pattern的字符串全部替换为表达式replacement。如果replacement中需要包含pattern的部分字符,则可以使用”()”来记录,在replacement中只是需要用”\\1″来读取。
3、preg_split :
函数格式:array preg_split(string pattern, string subject, int [limit]);
这个函数和函数split一样,区别仅在与split可以使用简单正则表达式来分割匹配的字符串,而preg_split使用完全的Perl兼容正则表达式。第三个参数limit代表允许返回多少个符合条件的值。
4、preg_grep :
函数格式:array preg_grep(string patern , array input);
这个函数和preg_match功能基本上,不过preg_grep可以将给定的数组input中的所有元素匹配,返回一个新的数组。
下面举一个例子,比如我们要检查Email地址的格式是否正确:
<?php
function emailIsRight($email) {
if (preg_match(”^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$”,$email)) {
return 1;
}
return 0;
}
if(emailIsRight(\’y10k@963.net\’)) echo \’正确<br>\’;
if(!emailIsRight(\’y10k@fffff\’)) echo \’不正确<br>\’;
?>
上面的程序会输出”正确<br>不正确”。
8.PHP中的Perl兼容正则表达式和Perl/Ereg正则表达式的区别:
虽然叫做“Perl兼容正则表达式”,但是和Perl的正则表达式相比,PHP的还是由一些不同,比如修饰符“G”在Perl里面代表全部匹配,但是在PHP中没有加入对这个修饰符的支持。
还有就是和ereg系列函数的区别,ereg也是PHP中提供的正则表达式函数,不过和preg相比,要弱上很多。
1、ereg里面是不需要也不能使用分隔符和修饰符的,所以ereg的功能比preg要弱上不少。
2、关于”.”:点在正则里面一般是除了换行符以外的全部字符,但是在ereg里面的”.”是任意字符,即包括换行符!如果在preg里面希望”.”能够包括换行符,可以在修饰符中加上”s”。
3、ereg默认使用贪婪模式,并且不能修改,这个给很多替换和匹配带来麻烦。
4、速度:这个或许是很多人关心的问题,会不会preg功能强大是以速度来换取的?不用担心,preg的速度要远远比ereg快,笔者做了一个程序测试:
time test:
PHP代码:
<?php
echo ”Preg_replace used time:”;
$start = time();
for($i=1;$i<=100000;$i++) {
$str = ”ssssssssssssssssssssssssssss”;
preg_replace(”/s/”,”",$str);
}
$ended = time()-$start;
echo $ended;
echo ”
ereg_replace used time:”;
$start = time();
for($i=1;$i<=100000;$i++) {
$str = ”ssssssssssssssssssssssssssss”;
ereg_replace(”s”,”",$str);
}
$ended = time()-$start;
echo $ended;
echo ”
str_replace used time:”;
$start = time();
for($i=1;$i<=100000;$i++) {
$str = ”sssssssssssssssssssssssssssss”;
str_replace(”s”,”",$str);
}
$ended = time()-$start;
echo $ended;
?>
结果:
Preg_replace used time:5
ereg_replace used time:15
str_replace used time:2
str_replace因为不需要匹配所以速度非常快,而preg_replace的速度比ereg_replace要快上不少。
9.关于PHP3.0对于preg的支持:
在PHP 4.0中默认加入了preg支持,但是在3.0中确没有。如果在3.0中希望使用preg函数,必须加载php3_pcre.dll文件,只要在php.ini的extension部分设置加入”extension = php3_pcre.dll”然后从新启动PHP就可以了!
其实正则表达式还常用于UbbCode的实现,很多PHP论坛都使用了这个方法(比如zForum zphp.com或者vB vbullent.com),但是具体的代码比较长。