<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Domety &#187; PHP</title>
	<atom:link href="http://domety.com/archives/category/development/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://domety.com</link>
	<description>分享软件、互联网应用技巧以及开发技能</description>
	<lastBuildDate>Wed, 26 May 2010 14:28:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>正则表达式一般规则</title>
		<link>http://domety.com/archives/213/</link>
		<comments>http://domety.com/archives/213/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 13:07:04 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://domety.com/?p=213</guid>
		<description><![CDATA[正则表达式用于对字符串的查找和替换，有着强大的功能。本文记录了正则表达式的一般规则，以方便查阅。
大部分语言都支持正则表达式，但是不同的语言之间又有那么一点的不同。本文以php支持的正则表达式为例（当然大部分在其它语言也是可以使用的），你在学习的过程中，可以通过本站的正则表达式测试工具进行测试，本工具是基于php制作的。如果你想学习正则表达式，那么请你在阅读本文的时候一定要多动手测试，多思考。
有关本文的一些约定
为了书写方便以及结合php相关函数，本文中使用patten:代表正则表达式，以subject:代表源字符串，以matches:代表查找结果（匹配结果）。
一个简单的正则表达式
在正式开始之前，我想让你知道，其实正则表达式并没有你想像的那么难，只是一些规则而已。我们来看一下如何用正则表达式从源字符中查找一个目标字符串：从domety中查找me
patten:me
subject:domety
你可以用正则表达测试工具测试一下，看一下结果。简单？就这么简单！我们用正则表达的思想来解释一下这个正则表达式(me)的意思：字母m之后紧跟着一个字母e。而源字符串domety中正好也存在这样的字符串，所以匹配的结果就是me。
特殊字符
如果像上面例子中只是简单的查找一个字符串，也就没必要使用正则表达式了。正则表达式之所以强大，还是因为这些特殊字符的存在。
开始和结束(^和$)
字符^代表字符串的开始位置，$代表字符串的结束位置。请注意这两个字符其实并不匹配任何字符，只是一个位置。我们现在把上面的例子改成patten:^me，再测试一下你会发现匹配结果为空。因为^me的意思是：查找以字母m开头，紧接着一个字母e的字符串。如果你把正则表达式改为patten:^do，那么匹配结果就为do。
对于$的理解也是一样，比如do$的意思就是：字符串以字母o结束，并且之前是一个字母d。如果你用do$去匹配domety，结果肯定为空。我们再来看一下这样一个正则表达式：^domety$，它的意思是：以d开头，紧接着一个o，然后是一个m然后是一个e然后是一个t，最后以一个y结束。那么这样一个正则表达式就只匹配domety字符串，如果你想让它去试图匹配domety.com，结果将为空。
字符类([]和[^])
[]代表一个字符类，它之间可以包含无数个字符，但它只匹配其中的一个字符。比如[abc]只匹配a或者b或者c。我们举个例子：[Dd]dbug，它的意思是查找这样一个字符串：一个大写或小写的字母d，紧接着一个字母d然后是一个b然后是一个u然后是一个g。那么它即匹配ddbug又匹配Ddbug。
在字符类中，还支持使用-来代表一个范围，[a-z]匹配所有的小写字母，[0-9]测匹配数字。比如我们想查找&#60;h1&#62;到&#60;h6&#62;的标签
patten:&#60;h[1-6]&#62;
subject:&#60;h1&#62;title1&#62;&#60;/h1&#62;&#60;h2&#62;title2&#60;/h2&#62;&#60;h6&#62;title6&#60;/h6&#62;
那么匹配结果就是h1,h2和h6，你可以亲自测试一下。
这里有一个问题：既然-在字符类代表了范围，那么如果我想在字符类中匹配-怎么呢？简单，只需要把-放在第一个或最后一个位置即可，比如[-a-z]即匹配-又匹配小写字母。
那么[^]是什么意思呢？它匹配不在字符类中的任意一个字符，比如[^a-z]匹配所有非小写字母、[^0-9]匹配所有的非数字字符。
所有字符(.)
字符.可以匹配所有字符，但是在字符类[]中仍然只匹配.，请测试表达式a.c和a[.]c的区别，可以用它们分别匹配abc和a.c做测试，看结果有何不同。
或表达式(&#124;)
&#124;字符的作用有点像字符类[]，都可以匹配多个字符中的任意一个，不过&#124;还可以匹配多个字符串中的任意一个。比如ddbug&#124;domety，即匹配ddbug又匹配domety。再如，“第一”用英文写法可以是first也可以是1st，通过&#124;我们可以很方便的找出first或者1st。我们可以这样写正则表达式：first&#124;1st，也可以写成(fir&#124;1)st。请测试：
patten:(fir&#124;1)st
subject:1st is first
可选(?)
简单的说就是在?之前的字符或表达式可以出现0次或1次，可有可无。比如说表达式ab?c即匹配abc又匹配ac，表达式(ab)?c即匹配c又匹配abc。
重复(+或*)
在+之前的字符或表达式至少要出现一次，可以无限重复。而在*之前的字符或表达式至少出现0次，也可以无限重复。最常用的组合是.+(任意多个任意字符，但至少要有一个字符)和.*（任意多个任意字符，也可以没有任何字符）。比如a.+b匹配a和b之间含有任何字符串的字符串(acb、acdb等)，但是不会匹配ab。而表达式a.*b则匹配ab，这就两者的唯一区别。
上面说的是无限次的重复，还有一种方法是指定重复的次数{min,max}，比如{2}重复两次，{3,9}重复3到9次。表达式ab{3}c匹配abbbc。
转意字符(\)
上面介绍了一些特殊字符，那么如果我们想匹配这些特殊字符应该怎么做呢？比如我想查找0.5+2*3=?这样的字符串，如何写正则表达式？当然不能直接用0.5+2*3=? ，这样一个表达式的意思就成了：一个或多个数字0,随后是一个任意字符，然后是1个或多个数字5,然后接着0个或多个数字2,然后是一个数字3接着0个或多个＝号。
这个时候我就需要使用车转意字符\，把这些特殊字符转换成普通的字符。上面的正则表达式就可以这样写：0\.5\+2\*3=\?，这个表达式就可以匹配字符串0.5+2*3=?
转意字符\不仅可以把特殊字符转化为普通字符，还可以把普通字符转化为特殊字符。比如\d就把一个普通的字符d转化成了一个特殊的含意，它不再匹配字母d，而是匹配所有的数字，它等效于[0-9]。\b则表示单词的边界，这为我们匹配某个单词带来了很大的方便，比如刚开始的例子中表达式do可以匹配domety，但是如果我们想查找do这个单词呢？就可以把表达式改成\bdo\b，这样再测试一下，你会发现它不在匹配domety,而可以匹配just do it，因为在这个字符串中do是一个单词。
常用的还有,\s代表空白字符(包括空格、制表符tab、回车符、换行符等)，\w代表字母或者数字([a-zA-Z0-9])。\D代表非数字字符，\W代表非字符和数字的字符，\S代表非空白字符。
模式
一、忽略大小写(i)
当我们查找的字符串不需要区分大小写的时候，就可以使用忽略大小写的模式i，该模式的表达式结构为：(?i:)。比如表达式(?i:domety)可以匹配domety、DOMETY、Domety、DOmety等。除了这样写以外，还可以使用语言自带的方式，以php的preg_match为例：preg_match(&#8216;/domety/i&#8217;,'Domety&#8217;);
二、单行模式(s)
单行模式的原名叫&#8221;dot-matches-all&#8221;，意思是.匹配所有字符。也许你要问了:点本来不就是匹配所有字符的吗？基本上说是的，但是它不会去匹配换行符。表达式.+一次只能匹配一行，如果你的字符串有两行的话，它会匹配两次。而使用单行模式，.的意义真正的是匹配所有字符，包括换行符。
单行模式的表达式结构为：(?s:)。比如表达式(?s:.+)一次就可以匹配所有的字符串，不管你的字符串有多少行。
三、多行模式
多行模式的原名叫&#8221;enhanced line-anchor&#8221;，它可以使^匹配任意一行字符串开始的位置，使$匹配任意一行字符串结束的位置，而不是整个字符串的开始和结束位置。
四、原义字符
前面我们说过，如果想要匹配一些特殊字符的时候，需要先使用转义字符把这些字符转换成普通字符。不过，除了这一种方法之外，还有一种方法，就是把表达式写在\Q和\E之间。表达式：\Q0.5+2*3=?\E 可以完美的匹配字符串0.5+2*3=?
括号和引用
在前面的例子中，你肯定看到了()的用法，它可以对表达式进行分组，但还有另一个作用，就是()中的匹配结果已经被默默的保存到了一些“变量”中。这些“变量”的格式为\num，比如\1,\2,\3等。我们称这些“变量”为“反向引用”，我还是习惯把它们叫作“变量”。变量\1的值等于表达式中第一个括弧匹配的结果，\2的值等于第二个括弧匹配的结果，以此类推。
比如有这样一个正则表达式：(\w+)\s(\w+)，它的意思是匹配以空白字符隔开的两个字符串，如果用它去匹配&#8221;ddbug domety&#8220;，那么\1的值就是ddbug，而\2的值为domety。
如果我们在正则表达式中使用这些变量，就会有很神奇的效果。最常见的一个例子是查找两个连续重复的单词，表达式是这样的：(\b\w+\b)\s\1。这里我就不举例说明具体的使用方法了，你可以用它去匹配任意两个继续的单词，看一下效果。最后再注意这个表达式和(\b\w+\b)\s(\b\w+\b)的区别。变量中保存的是一个实际的字符串，而不是表达式。
变量的数字顺序是按照左括弧(出现的顺序定义的。考虑这样一个表达式:(ddbug (in) (domety))，请问\1,\2,\3保存的值分别为多少？给你一分钟时间考虑。
你是不是想回答\1=ddbug in domety,\2=in,\3=domety。你能这样回答已经算是掌握了后向引用的含意，但是这个回答是不正确的。为什么呢？我前面说过，这些变量保存的值是匹配结果，而不是表达本身。这个表达式还没有去匹配任何字符串，怎么会有结果呢。如果使用这个表达式去匹配ddbug in domety这样一个字符串，那么你的回答就是完全正确的。如果去匹配其它字符串，比如welcome to domety，那么变量的值就为空。
向左看 向右看
最后再介绍两个有点绕口的表达式，英文原名为lookahead和lookbehind，签于大家对向前和向后有不同的理解，我在这里把它们称作向右和向左。表达式的格式为：向右：(?=),向左(?&#60;=)。应该怎么理解它们呢，它们不匹配任何字符，而是匹配一个位置。
比如我们只想查找domety中的do，可以这样写表达式:(?=domety)do。这个表达式的意思是：首先是一个位置，站在该位置向右看，可以看到domety,然后紧接着do。如果你用这个表达式去匹配domety,自然能成功，但是如果你用这个表达式去匹配字符串just do it，则会失败。因为该字符串中不存在这样一个位置。相反，如果我们想查找所有不在domety中的do,可以这样写表达式(?!domety)do，它的意思是：首先是一个位置，站在该位置向右看，看不到domety,然后紧接着do。该表达式可以匹配just do it但是不能匹配domety。
我们再来结合着向左看来查找domety中的me,表达式为：(?&#60;=do)me(?=ty)，它的意思是：首先是一个位置，该位置的左边是do，然后接着是me，然后又是一个位置，该位置的右边是ty。另外，(?&#60;!)的意思相反，就是该位置的左边不是什么什么。
以上就是DDBug这一个星期来的学习总结，完成本文用时两天，在写作的过程对每一个正则表达式都经过反复的测试，确保正确。如果你对正则表达感兴趣，希望本文对你有所帮助。本文只是正则表达式一般的规则，也可以说是常用的规则。更高级的话题将在以后和大家讨论，因为我还没有理解透彻，所以就不在这里误人子弟了。
最后请记住，一定要多动手练习，用正则表达式去解决实际问题。
版权声明: 转载时请以超链接形式标明文章原始出处和作者信息本文来自: Domety&#187;《正则表达式一般规则》本文链接: http://domety.com/archives/213/本文作者: DDBug发表时期: 一月 8th,2010关键字: PHP正则表达式本站的feed地址已经更改为http://feed.domety.com/,请朋友们手动更改一下，谢谢相关文章查看页面执行php占用内存情况Windows下搭建apache+mysql+php平台实况直播公布本站首页缩略图方法自定义more标签的more跳转查看页面执行php占用内存情况<ul style="color:#808080;padding:10px;border:1px solid #D7D7D7;list-style-type:none;"><li><a href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>: 转载时请以超链接形式标明文章原始出处和作者信息</li><li>本文来自: <a href="http://domety.com">Domety</a>&raquo;<a href="http://domety.com/archives/213/">《正则表达式一般规则》</a></li><li>本文链接: <a href="http://domety.com/archives/213/" title="正则表达式一般规则">http://domety.com/archives/213/</a></li><li>本文作者: <a href="http://domety.com">DDBug</a></li><li>发表时期: 一月 8th,2010</li><li>关键字: <a href="http://domety.com/archives/tag/php/" rel="tag">PHP</a><a href="http://domety.com/archives/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f/" rel="tag">正则表达式</a></li></ul><p style="color=red">本站的feed地址已经更改为<a href="http://feed.domety.com/">http://feed.domety.com/</a>,请朋友们手动更改一下，谢谢</p><h2>相关文章</h2><ul><li><a href="http://domety.com/archives/220/">自定义more标签的more跳转</a></li><li><a href="http://domety.com/archives/217/">公布本站首页缩略图方法</a></li><li><a href="http://domety.com/archives/167/">Windows下搭建apache+mysql+php平台实况直播</a></li><li><a href="http://domety.com/archives/208/">查看页面执行php占用内存情况</a></li><li><a href="http://domety.com/archives/208/">查看页面执行php占用内存情况</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>正则表达式用于对字符串的查找和替换，有着强大的功能。本文记录了正则表达式的一般规则，以方便查阅。</p>
<p>大部分语言都支持正则表达式，但是不同的语言之间又有那么一点的不同。本文以php支持的正则表达式为例（当然大部分在其它语言也是可以使用的），你在学习的过程中，可以通过本站的<a title="Domety正则表达式在线测试工具" href="http://domety.com/tools/regex/" target="_blank">正则表达式测试工具</a>进行测试，本工具是基于php制作的。如果你想学习正则表达式，那么请你在阅读本文的时候一定要多动手测试，多思考。</p>
<h3>有关本文的一些约定</h3>
<p>为了书写方便以及结合php相关函数，本文中使用patten:代表正则表达式，以subject:代表源字符串，以matches:代表查找结果（匹配结果）。</p>
<h3>一个简单的正则表达式</h3>
<p>在正式开始之前，我想让你知道，其实正则表达式并没有你想像的那么难，只是一些规则而已。我们来看一下如何用正则表达式从源字符中查找一个目标字符串：从domety中查找me</p>
<pre>patten:<span style="color: #ff0000;">me</span>
subject:<span style="color: #339966;">domety</span></pre>
<p>你可以用正则表达测试工具测试一下，看一下结果。简单？就这么简单！我们用正则表达的思想来解释一下这个正则表达式(me)的意思：字母m之后紧跟着一个字母e。而源字符串domety中正好也存在这样的字符串，所以匹配的结果就是me。</p>
<h3>特殊字符</h3>
<p>如果像上面例子中只是简单的查找一个字符串，也就没必要使用正则表达式了。正则表达式之所以强大，还是因为这些特殊字符的存在。</p>
<h4>开始和结束(^和$)</h4>
<p>字符<span style="color: #ff0000;">^</span>代表字符串的开始位置，<span style="color: #ff0000;">$</span>代表字符串的结束位置。请注意这两个字符其实并不匹配任何字符，只是一个位置。我们现在把上面的例子改成patten:^me，再测试一下你会发现匹配结果为空。因为<span style="color: #ff0000;">^me</span>的意思是：查找以字母m开头，紧接着一个字母e的字符串。如果你把正则表达式改为patten:^do，那么匹配结果就为do。</p>
<p>对于<span style="color: #ff0000;">$</span>的理解也是一样，比如<span style="color: #ff0000;">do$</span>的意思就是：字符串以字母o结束，并且之前是一个字母d。如果你用<span style="color: #ff0000;">do$</span>去匹配<span style="color: #339966;">domety</span>，结果肯定为空。我们再来看一下这样一个正则表达式：<span style="color: #ff0000;">^domety$</span>，它的意思是：以d开头，紧接着一个o，然后是一个m然后是一个e然后是一个t，最后以一个y结束。那么这样一个正则表达式就只匹配<span style="color: #339966;">domety</span>字符串，如果你想让它去试图匹配<span style="color: #339966;">domety.com</span>，结果将为空。</p>
<h4>字符类([]和[^])</h4>
<p><span style="color: #ff0000;">[]</span>代表一个字符类，它之间可以包含无数个字符，但它只匹配其中的一个字符。比如[abc]只匹配a或者b或者c。我们举个例子：<span style="color: #ff0000;">[Dd]dbug</span>，它的意思是查找这样一个字符串：一个大写或小写的字母d，紧接着一个字母d然后是一个b然后是一个u然后是一个g。那么它即匹配ddbug又匹配Ddbug。</p>
<p>在字符类中，还支持使用-来代表一个范围，<span style="color: #ff0000;">[a-z]</span>匹配所有的小写字母，<span style="color: #ff0000;">[0-9]</span>测匹配数字。比如我们想查找&lt;h1&gt;到&lt;h6&gt;的标签</p>
<pre>patten:&lt;h[1-6]&gt;
subject:&lt;h1&gt;title1&gt;&lt;/h1&gt;&lt;h2&gt;title2&lt;/h2&gt;&lt;h6&gt;title6&lt;/h6&gt;</pre>
<p>那么匹配结果就是h1,h2和h6，你可以亲自测试一下。</p>
<p>这里有一个问题：既然-在字符类代表了范围，那么如果我想在字符类中匹配-怎么呢？简单，只需要把-放在第一个或最后一个位置即可，比如<span style="color: #ff0000;">[-a-z]</span>即匹配-又匹配小写字母。</p>
<p>那么<span style="color: #ff0000;">[^]</span>是什么意思呢？它匹配不在字符类中的任意一个字符，比如<span style="color: #ff0000;">[^a-z]</span>匹配所有非小写字母、<span style="color: #ff0000;">[^0-9]</span>匹配所有的非数字字符。</p>
<h4>所有字符(.)</h4>
<p>字符<span style="color: #ff0000;">.</span>可以匹配所有字符，但是在字符类<span style="color: #ff0000;">[]</span>中仍然只匹配.，请测试表达式<span style="color: #ff0000;">a.c</span>和<span style="color: #ff0000;">a[.]c</span>的区别，可以用它们分别匹配<span style="color: #339966;">abc</span>和<span style="color: #339966;">a.c</span>做测试，看结果有何不同。</p>
<h4>或表达式(|)</h4>
<p><span style="color: #ff0000;">|</span>字符的作用有点像字符类<span style="color: #ff0000;">[]</span>，都可以匹配多个字符中的任意一个，不过|还可以匹配多个字符串中的任意一个。比如<span style="color: #ff0000;">ddbug|domety</span>，即匹配<span style="color: #339966;">ddbug</span>又匹配<span style="color: #339966;">domety</span>。再如，“第一”用英文写法可以是first也可以是1st，通过<span style="color: #ff0000;">|</span>我们可以很方便的找出first或者1st。我们可以这样写正则表达式：<span style="color: #ff0000;">first|1st</span>，也可以写成<span style="color: #ff0000;">(fir|1)st</span>。请测试：</p>
<pre>patten:(fir|1)st
subject:1st is first</pre>
<h4>可选(?)</h4>
<p>简单的说就是在<span style="color: #ff0000;">?</span>之前的字符或表达式可以出现0次或1次，可有可无。比如说表达式<span style="color: #ff0000;">ab?c</span>即匹配<span style="color: #339966;">abc</span>又匹配<span style="color: #339966;">ac</span>，表达式<span style="color: #ff0000;">(ab)?c</span>即匹配<span style="color: #339966;">c</span>又匹配<span style="color: #339966;">abc</span>。</p>
<h4>重复(+或*)</h4>
<p>在<span style="color: #ff0000;">+</span>之前的字符或表达式至少要出现一次，可以无限重复。而在<span style="color: #ff0000;">*</span>之前的字符或表达式至少出现0次，也可以无限重复。最常用的组合是<span style="color: #ff0000;">.+</span>(任意多个任意字符，但至少要有一个字符)和<span style="color: #ff0000;">.*</span>（任意多个任意字符，也可以没有任何字符）。比如<span style="color: #ff0000;">a.+b</span>匹配a和b之间含有任何字符串的字符串(acb、acdb等)，但是不会匹配ab。而表达式<span style="color: #ff0000;">a.*b</span>则匹配<span style="color: #339966;">ab</span>，这就两者的唯一区别。</p>
<p>上面说的是无限次的重复，还有一种方法是指定重复的次数{min,max}，比如<span style="color: #ff0000;">{2}</span>重复两次，<span style="color: #ff0000;">{3,9}</span>重复3到9次。表达式<span style="color: #ff0000;">ab{3}c</span>匹配<span style="color: #339966;">abbbc</span>。</p>
<h4>转意字符(\)</h4>
<p>上面介绍了一些特殊字符，那么如果我们想匹配这些特殊字符应该怎么做呢？比如我想查找0.5+2*3=?这样的字符串，如何写正则表达式？当然不能直接用<span style="color: #ff0000;">0.5+2*3=? <span style="color: #000000;">，</span></span>这样一个表达式的意思就成了：一个或多个数字0,随后是一个任意字符，然后是1个或多个数字5,然后接着0个或多个数字2,然后是一个数字3接着0个或多个＝号。</p>
<p>这个时候我就需要使用车转意字符<span style="color: #ff0000;">\</span>，把这些特殊字符转换成普通的字符。上面的正则表达式就可以这样写：<span style="color: #ff0000;">0\.5\+2\*3=\?<span style="color: #000000;">，</span></span>这个表达式就可以匹配字符串<span style="color: #339966;">0.5+2*3=?</span></p>
<p>转意字符<span style="color: #ff0000;">\</span>不仅可以把特殊字符转化为普通字符，还可以把普通字符转化为特殊字符。比如<span style="color: #ff0000;">\d</span>就把一个普通的字符d转化成了一个特殊的含意，它不再匹配字母d，而是匹配所有的数字，它等效于[0-9]。<span style="color: #ff0000;">\b</span>则表示单词的边界，这为我们匹配某个单词带来了很大的方便，比如刚开始的例子中表达式<span style="color: #ff0000;">do</span>可以匹配<span style="color: #339966;">domety</span>，但是如果我们想查找do这个单词呢？就可以把表达式改成<span style="color: #ff0000;">\bdo\b</span>，这样再测试一下，你会发现它不在匹配<span style="color: #339966;">domety</span>,而可以匹配<span style="color: #339966;">just do it</span>，因为在这个字符串中do是一个单词。</p>
<p>常用的还有,<span style="color: #ff0000;">\s</span>代表空白字符(包括空格、制表符tab、回车符、换行符等)，<span style="color: #ff0000;">\w</span>代表字母或者数字([a-zA-Z0-9])。<span style="color: #ff0000;">\D</span>代表非数字字符，<span style="color: #ff0000;">\W</span>代表非字符和数字的字符，<span style="color: #ff0000;">\S</span>代表非空白字符。</p>
<h3>模式</h3>
<h4>一、忽略大小写(i)</h4>
<p>当我们查找的字符串不需要区分大小写的时候，就可以使用忽略大小写的模式i，该模式的表达式结构为：(?i:)。比如表达式<span style="color: #ff0000;">(?i:domety)</span>可以匹配<span style="color: #339966;">domety</span>、<span style="color: #339966;">DOMETY</span>、<span style="color: #339966;">Domety</span>、<span style="color: #339966;">DOmety</span>等。除了这样写以外，还可以使用语言自带的方式，以php的preg_match为例：preg_match(&#8216;/domety/i&#8217;,'Domety&#8217;);</p>
<h4>二、单行模式(s)</h4>
<p>单行模式的原名叫&#8221;dot-matches-all&#8221;，意思是.匹配所有字符。也许你要问了:点本来不就是匹配所有字符的吗？基本上说是的，但是它不会去匹配换行符。表达式<span style="color: #ff0000;">.+</span>一次只能匹配一行，如果你的字符串有两行的话，它会匹配两次。而使用单行模式，<span style="color: #ff0000;">.</span>的意义真正的是匹配所有字符，包括换行符。</p>
<p>单行模式的表达式结构为：(?s:)。比如表达式<span style="color: #ff0000;">(?s:.+)</span>一次就可以匹配所有的字符串，不管你的字符串有多少行。</p>
<h4>三、多行模式</h4>
<p>多行模式的原名叫&#8221;enhanced line-anchor&#8221;，它可以使<span style="color: #ff0000;">^</span>匹配任意一行字符串开始的位置，使<span style="color: #ff0000;">$</span>匹配任意一行字符串结束的位置，而不是整个字符串的开始和结束位置。</p>
<h4>四、原义字符</h4>
<p>前面我们说过，如果想要匹配一些特殊字符的时候，需要先使用转义字符把这些字符转换成普通字符。不过，除了这一种方法之外，还有一种方法，就是把表达式写在<span style="color: #ff0000;">\Q</span>和<span style="color: #ff0000;">\E</span>之间。表达式：<span style="color: #ff0000;">\Q0.5+2*3=?\E</span> 可以完美的匹配字符串<span style="color: #339966;">0.5+2*3=?</span></p>
<h3>括号和引用</h3>
<p>在前面的例子中，你肯定看到了<span style="color: #ff0000;">()</span>的用法，它可以对表达式进行分组，但还有另一个作用，就是()中的匹配结果已经被默默的保存到了一些“变量”中。这些“变量”的格式为\num，比如\1,\2,\3等。我们称这些“变量”为“反向引用”，我还是习惯把它们叫作“变量”。变量\1的值等于表达式中第一个括弧匹配的结果，\2的值等于第二个括弧匹配的结果，以此类推。</p>
<p>比如有这样一个正则表达式：<span style="color: #ff0000;">(\w+)\s(\w+)<span style="color: #000000;">，</span></span>它的意思是匹配以空白字符隔开的两个字符串，如果用它去匹配&#8221;<span style="color: #339966;">ddbug domety</span>&#8220;，那么\1的值就是ddbug，而\2的值为domety。</p>
<p>如果我们在正则表达式中使用这些变量，就会有很神奇的效果。最常见的一个例子是查找两个连续重复的单词，表达式是这样的：<span style="color: #ff0000;">(\b\w+\b)\s\1</span>。这里我就不举例说明具体的使用方法了，你可以用它去匹配任意两个继续的单词，看一下效果。最后再注意这个表达式和<span style="color: #ff0000;">(\b\w+\b)\s(\b\w+\b)</span>的区别。变量中保存的是一个实际的字符串，而不是表达式。</p>
<p>变量的数字顺序是按照左括弧(出现的顺序定义的。考虑这样一个表达式:(ddbug (in) (domety))，请问\1,\2,\3保存的值分别为多少？给你一分钟时间考虑。</p>
<p>你是不是想回答\1=ddbug in domety,\2=in,\3=domety。你能这样回答已经算是掌握了后向引用的含意，但是这个回答是不正确的。为什么呢？我前面说过，这些变量保存的值是匹配结果，而不是表达本身。这个表达式还没有去匹配任何字符串，怎么会有结果呢。如果使用这个表达式去匹配ddbug in domety这样一个字符串，那么你的回答就是完全正确的。如果去匹配其它字符串，比如welcome to domety，那么变量的值就为空。</p>
<h3>向左看 向右看</h3>
<p>最后再介绍两个有点绕口的表达式，英文原名为lookahead和lookbehind，签于大家对向前和向后有不同的理解，我在这里把它们称作向右和向左。表达式的格式为：向右：<span style="color: #ff0000;">(?=)</span>,向左<span style="color: #ff0000;">(?&lt;=)</span>。应该怎么理解它们呢，它们不匹配任何字符，而是匹配一个位置。</p>
<p>比如我们只想查找domety中的do，可以这样写表达式:<span style="color: #ff0000;">(?=domety)do</span>。这个表达式的意思是：首先是一个位置，站在该位置向右看，可以看到domety,然后紧接着do。如果你用这个表达式去匹配domety,自然能成功，但是如果你用这个表达式去匹配字符串just do it，则会失败。因为该字符串中不存在这样一个位置。相反，如果我们想查找所有不在domety中的do,可以这样写表达式<span style="color: #ff0000;">(?!domety)do</span>，它的意思是：首先是一个位置，站在该位置向右看，看不到domety,然后紧接着do。该表达式可以匹配just do it但是不能匹配domety。</p>
<p>我们再来结合着向左看来查找domety中的me,表达式为：<span style="color: #ff0000;">(?&lt;=do)me(?=ty)<span style="color: #000000;">，</span></span>它的意思是：首先是一个位置，该位置的左边是do，然后接着是me，然后又是一个位置，该位置的右边是ty。另外，(?&lt;!)的意思相反，就是该位置的左边不是什么什么。</p>
<p>以上就是DDBug这一个星期来的学习总结，完成本文用时两天，在写作的过程对每一个正则表达式都经过反复的测试，确保正确。如果你对正则表达感兴趣，希望本文对你有所帮助。本文只是正则表达式一般的规则，也可以说是常用的规则。更高级的话题将在以后和大家讨论，因为我还没有理解透彻，所以就不在这里误人子弟了。</p>
<p>最后请记住，一定要多动手练习，用正则表达式去解决实际问题。</p>
<ul style="color:#808080;padding:10px;border:1px solid #D7D7D7;list-style-type:none;"><li><a href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>: 转载时请以超链接形式标明文章原始出处和作者信息</li><li>本文来自: <a href="http://domety.com">Domety</a>&raquo;<a href="http://domety.com/archives/213/">《正则表达式一般规则》</a></li><li>本文链接: <a href="http://domety.com/archives/213/" title="正则表达式一般规则">http://domety.com/archives/213/</a></li><li>本文作者: <a href="http://domety.com">DDBug</a></li><li>发表时期: 一月 8th,2010</li><li>关键字: <a href="http://domety.com/archives/tag/php/" rel="tag">PHP</a><a href="http://domety.com/archives/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f/" rel="tag">正则表达式</a></li></ul><p style="color=red">本站的feed地址已经更改为<a href="http://feed.domety.com/">http://feed.domety.com/</a>,请朋友们手动更改一下，谢谢</p><h2>相关文章</h2><ul><li><a href="http://domety.com/archives/217/">公布本站首页缩略图方法</a></li><li><a href="http://domety.com/archives/167/">Windows下搭建apache+mysql+php平台实况直播</a></li><li><a href="http://domety.com/archives/220/">自定义more标签的more跳转</a></li><li><a href="http://domety.com/archives/208/">查看页面执行php占用内存情况</a></li><li><a href="http://domety.com/archives/208/">查看页面执行php占用内存情况</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/213/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>查看页面执行php占用内存情况</title>
		<link>http://domety.com/archives/208/</link>
		<comments>http://domety.com/archives/208/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 14:00:01 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://domety.com/?p=208</guid>
		<description><![CDATA[今天头脑一热，想看一下页面在执行的过程中占用了多少内存，我也不知道这样做的目的是什么，可能是出于我的惯性思维吧。不过这样做也不是完全没用，你可以清楚的知道哪些页面占用的内存比较多，特别是对于使用共用主机的网站，一般空间商都会限制每个网站的资源占用情况的（包括cpu和内存）。万一在我们不知道的情况下，经常占用太多的内存，你愿意，空间商可不同意了。当然这种情况是很少出现的。
memory_get_usage
php提供了一个查看分配的内存大小的函数memory_get_usage，原型如下
int memory_get_usage ([ bool $real_usage = false ] )
$real_usage为可选参数，默认为false(即不包括memory_get_usage本身占用的内存)，memory_get_usage(true)可查看包括memory_get_usage在内的内存占用情况。
该函数默认返回的是占用内存的字节数，我们可以通过除以1024来以KB为单位，再除以1024以MB为单位。
使用方法
对于wordpress,我们只需要在主题文件夹下的footer.php文件调用memory_get_usage函数即可
&#60;?php printf(' memory usage: %01.2f MB', memory_get_usage()/1024/1024); ?&#62;
该语句的输出以MB为单位，小数点后保留2位。具体效果可以参看本站的底部。
题外话
当然，如果你想做一个详细的测试，可以在页面代码执行之前、模板调用之前以及页面代码执行完毕之后分别调用该函数以做对比，以下是我做的测试：
一、在页面代码执行之前调用memory_get_usage，即在根目录下的index.php文件的最开始部分加入上面的代码，结果在0.3M左右。
二、在模板调用之前，即在主题文件夹下的header.php文件的最开始部分调用memory_get_usage，结果在11M左右。说明wordpress在调用模板之前已经加载了大量的数据。
三、在页面代码执行完毕之后，即在主题文件夹下的footer.php文件的最后部分调用memory_get_usage，结果因页面的不同而不同，不过也都差不多在12M以下。说明主题本身的php调用没有占用多少内存。如果这个结果很高的话，就要检查一下你的主题文件了。
以上结果因为主机的不同而不同，因wordpress的不同而不同，因主题的不同而不同，因各种因素的不同而不同……仅做参考。
另外，如果你想测试某段代码执行后的内存使用情况，可以在代码执行之前和执行之后分别调用memory_get_usage，从而可以看出那段代码对内存的影响。
版权声明: 转载时请以超链接形式标明文章原始出处和作者信息本文来自: Domety&#187;《查看页面执行php占用内存情况》本文链接: http://domety.com/archives/208/本文作者: DDBug发表时期: 一月 2nd,2010关键字: PHPWordPress内存本站的feed地址已经更改为http://feed.domety.com/,请朋友们手动更改一下，谢谢相关文章如何设置wordpress主题的日期格式为WordPress添加分页导航添加keywords和description向搜索引擎提交站点the_content是如何输出摘要和全文的<ul style="color:#808080;padding:10px;border:1px solid #D7D7D7;list-style-type:none;"><li><a href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>: 转载时请以超链接形式标明文章原始出处和作者信息</li><li>本文来自: <a href="http://domety.com">Domety</a>&raquo;<a href="http://domety.com/archives/208/">《查看页面执行php占用内存情况》</a></li><li>本文链接: <a href="http://domety.com/archives/208/" title="查看页面执行php占用内存情况">http://domety.com/archives/208/</a></li><li>本文作者: <a href="http://domety.com">DDBug</a></li><li>发表时期: 一月 2nd,2010</li><li>关键字: <a href="http://domety.com/archives/tag/php/" rel="tag">PHP</a><a href="http://domety.com/archives/tag/wordpress/" rel="tag">WordPress</a><a href="http://domety.com/archives/tag/%e5%86%85%e5%ad%98/" rel="tag">内存</a></li></ul><p style="color=red">本站的feed地址已经更改为<a href="http://feed.domety.com/">http://feed.domety.com/</a>,请朋友们手动更改一下，谢谢</p><h2>相关文章</h2><ul><li><a href="http://domety.com/archives/244/">对所有日志的指定字符串进行替换</a></li><li><a href="http://domety.com/archives/247/">开启Akismet插件，自动过滤垃圾留言</a></li><li><a href="http://domety.com/archives/224/">the_content是如何输出摘要和全文的</a></li><li><a href="http://domety.com/archives/253/">为wordpress添加评论邮件回复功能</a></li><li><a href="http://domety.com/archives/167/">Windows下搭建apache+mysql+php平台实况直播</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>今天头脑一热，想看一下页面在执行的过程中占用了多少内存，我也不知道这样做的目的是什么，可能是出于我的惯性思维吧。不过这样做也不是完全没用，你可以清楚的知道哪些页面占用的内存比较多，特别是对于使用共用主机的网站，一般空间商都会限制每个网站的资源占用情况的（包括cpu和内存）。万一在我们不知道的情况下，经常占用太多的内存，你愿意，空间商可不同意了。当然这种情况是很少出现的。<span id="more-208"></span></p>
<h3>memory_get_usage</h3>
<p>php提供了一个查看分配的内存大小的函数memory_get_usage，原型如下</p>
<pre>int memory_get_usage ([ bool $real_usage = false ] )</pre>
<p>$real_usage为可选参数，默认为false(即不包括memory_get_usage本身占用的内存)，memory_get_usage(true)可查看包括memory_get_usage在内的内存占用情况。</p>
<p>该函数默认返回的是占用内存的字节数，我们可以通过除以1024来以KB为单位，再除以1024以MB为单位。</p>
<h3>使用方法</h3>
<p>对于wordpress,我们只需要在主题文件夹下的footer.php文件调用memory_get_usage函数即可</p>
<pre>&lt;?php printf(' memory usage: %01.2f MB', memory_get_usage()/1024/1024); ?&gt;</pre>
<p>该语句的输出以MB为单位，小数点后保留2位。具体效果可以参看本站的底部。</p>
<h3>题外话</h3>
<p>当然，如果你想做一个详细的测试，可以在页面代码执行之前、模板调用之前以及页面代码执行完毕之后分别调用该函数以做对比，以下是我做的测试：</p>
<p>一、在页面代码执行之前调用memory_get_usage，即在根目录下的index.php文件的最开始部分加入上面的代码，结果在0.3M左右。</p>
<p>二、在模板调用之前，即在主题文件夹下的header.php文件的最开始部分调用memory_get_usage，结果在11M左右。说明wordpress在调用模板之前已经加载了大量的数据。</p>
<p>三、在页面代码执行完毕之后，即在主题文件夹下的footer.php文件的最后部分调用memory_get_usage，结果因页面的不同而不同，不过也都差不多在12M以下。说明主题本身的php调用没有占用多少内存。如果这个结果很高的话，就要检查一下你的主题文件了。</p>
<p>以上结果因为主机的不同而不同，因wordpress的不同而不同，因主题的不同而不同，因各种因素的不同而不同……仅做参考。</p>
<p>另外，如果你想测试某段代码执行后的内存使用情况，可以在代码执行之前和执行之后分别调用memory_get_usage，从而可以看出那段代码对内存的影响。</p>
<ul style="color:#808080;padding:10px;border:1px solid #D7D7D7;list-style-type:none;"><li><a href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>: 转载时请以超链接形式标明文章原始出处和作者信息</li><li>本文来自: <a href="http://domety.com">Domety</a>&raquo;<a href="http://domety.com/archives/208/">《查看页面执行php占用内存情况》</a></li><li>本文链接: <a href="http://domety.com/archives/208/" title="查看页面执行php占用内存情况">http://domety.com/archives/208/</a></li><li>本文作者: <a href="http://domety.com">DDBug</a></li><li>发表时期: 一月 2nd,2010</li><li>关键字: <a href="http://domety.com/archives/tag/php/" rel="tag">PHP</a><a href="http://domety.com/archives/tag/wordpress/" rel="tag">WordPress</a><a href="http://domety.com/archives/tag/%e5%86%85%e5%ad%98/" rel="tag">内存</a></li></ul><p style="color=red">本站的feed地址已经更改为<a href="http://feed.domety.com/">http://feed.domety.com/</a>,请朋友们手动更改一下，谢谢</p><h2>相关文章</h2><ul><li><a href="http://domety.com/archives/202/">wordpress循环之基础篇</a></li><li><a href="http://domety.com/archives/146/">Wordpress中为你的文章添加“相关文章”</a></li><li><a href="http://domety.com/archives/233/">为页面标题添加页码</a></li><li><a href="http://domety.com/archives/213/">正则表达式一般规则</a></li><li><a href="http://domety.com/archives/241/">终于解决了半角引号自动转换为全角引号的问题</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/208/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Windows下搭建apache+mysql+php平台实况直播</title>
		<link>http://domety.com/archives/167/</link>
		<comments>http://domety.com/archives/167/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 14:30:00 +0000</pubDate>
		<dc:creator>DDBug</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://domety.com/?p=167</guid>
		<description><![CDATA[打算开始制作一款有自己风格的wordpress主题了，在制作过程中，很多测试如果都放到服务器上测试又不方便，于是想在我的windows主机上搭建一个amp(apache+mysql+php)平台。最后再附加一个phpmyadmin，以方便管理mysql数据库，合称wampp平台。以下便是我安装过程的实录，以方便新手们参考。
安装包我选择的都是到目前为止官方最新版本：

apache:2.2.14
mysql:5.1.41
php:5.3.1
phpmyadmin:3.2.4


安装apache http server
你可以从这个官方地址下载最新版本的apache http server:http://httpd.apache.org/download.cgi，在写本文时的最新版本是2.2.4

下载Win32 Binary including OpenSSL 0.9.8k (MSI Installer)版本，在上面的Mirror中可以选择下载镜像站点，如果下载出现问题，可以更换一个镜像站点。
下载完成之后，我们开始安装，运行刚才下载的apache_2.2.14-win32-x86-openssl-0.9.8k.msi
在安装的过程中，你会看到一个让你输入服务器信息的界面

这里要求你输入Netword Domain(网站域名)、Server Name(服务器名)、Administrator&#8217;s Email Address(管理员Email邮箱)。因为我们是用作本机测试，采用默认的即可，也可输入你的个性化信息。点击Next进入下一步，选择安装类型.
默认的是Tpical(典型安装)，会安装到C盘下。如果你想更改安装路径，请选择Custom（自定义安装），然后点击Next进入下一步

点击“Change”更改安装目录，我选择安装到D盘：D:\Program Files\Apache Software Foundation\Apache2.2\
安装结束之后，我们来测试一下吧，在浏览器地址栏中输入http://localhost/或者http://127.0.0.1/。如果你看到了如下的“It Works!”，恭喜你，你已经成功安装了apache http server。
 
不过为了方便以后的管理，需要更改一下默认的站点目录。apache的默认站点目录在安装目录下的htdocs文件夹下，我的在D:\Program Files\Apache Software Foundation\Apache2.2\htdocs\ 下。现在我想把站点目录更改到E:\htdocs下，首先在E盘下新建一个htdocs文件夹。然后打开apache的配置文件httpd.conf（安装目录的conf文件夹内，也可通过 开始菜单——&#62;所有程序——&#62;Apache HTTP Server 2.2——&#62;Configure Apache Server——&#62;Edit the Apache httpd.conf Configuration File 打开）
把DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"改为DocumentRoot "E:/htdocs"

再把&#60;Directory "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"&#62;改为&#60;Directory "E:/htdocs"&#62;
打开系统托盘里的Apache Service Moniter

点击Restart重启apache service即可，这时候localhost和127.0.0.1就指向了E:\htdocs
安装Mysql
首先去mysql的官方网站下载最新版本http://dev.mysql.com/downloads/

点击Current Release下的最新推荐版本(目前为MySQL5.1)进入下载页面

点击Download选择平台Windows

这里有三个版本

三个版本的区别如下



特征
Essentials
Complete
Zip




安装程序
Yes
Yes
No


MySQL Server 配置向导
Yes
Yes
No


测试套件
No
Yes
Yes


MySQL Server
Yes
Yes
Yes


MySQL Client [...]<ul style="color:#808080;padding:10px;border:1px solid #D7D7D7;list-style-type:none;"><li><a href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>: 转载时请以超链接形式标明文章原始出处和作者信息</li><li>本文来自: <a href="http://domety.com">Domety</a>&raquo;<a href="http://domety.com/archives/167/">《Windows下搭建apache+mysql+php平台实况直播》</a></li><li>本文链接: <a href="http://domety.com/archives/167/" title="Windows下搭建apache+mysql+php平台实况直播">http://domety.com/archives/167/</a></li><li>本文作者: <a href="http://domety.com">DDBug</a></li><li>发表时期: 十二月 6th,2009</li><li>关键字: <a href="http://domety.com/archives/tag/apache/" rel="tag">apache</a><a href="http://domety.com/archives/tag/mysql/" rel="tag">mysql</a><a href="http://domety.com/archives/tag/php/" rel="tag">PHP</a><a href="http://domety.com/archives/tag/phpmyadmin/" rel="tag">phpmyadmin</a><a href="http://domety.com/archives/tag/windows/" rel="tag">Windows</a></li></ul><p style="color=red">本站的feed地址已经更改为<a href="http://feed.domety.com/">http://feed.domety.com/</a>,请朋友们手动更改一下，谢谢</p><h2>相关文章</h2><ul><li><a href="http://domety.com/archives/165/">xp仿Win 7 界面——博士WIN7风格包最终版</a></li><li><a href="http://domety.com/archives/208/">查看页面执行php占用内存情况</a></li><li><a href="http://domety.com/archives/198/">免费的分区管理软件EASEUS Partition Master 4.1.1</a></li><li><a href="http://domety.com/archives/212/">wordpress博客搬家过程</a></li><li><a href="http://domety.com/archives/244/">对所有日志的指定字符串进行替换</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>打算开始制作一款有自己风格的wordpress主题了，在制作过程中，很多测试如果都放到服务器上测试又不方便，于是想在我的windows主机上搭建一个amp(apache+mysql+php)平台。最后再附加一个phpmyadmin，以方便管理mysql数据库，合称wampp平台。以下便是我安装过程的实录，以方便新手们参考。</p>
<p>安装包我选择的都是到目前为止官方最新版本：</p>
<ul>
<li>apache:2.2.14</li>
<li>mysql:5.1.41</li>
<li>php:5.3.1</li>
<li>phpmyadmin:3.2.4</li>
</ul>
<p><span id="more-167"></span></p>
<h3>安装apache http server</h3>
<p>你可以从这个官方地址下载最新版本的apache http server:<a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>，在写本文时的最新版本是2.2.4</p>
<p><img class="alignnone" title="apache http server" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_000.jpg" alt="" width="520" height="281" /></p>
<p>下载Win32 Binary including OpenSSL 0.9.8k (MSI Installer)版本，在上面的Mirror中可以选择下载镜像站点，如果下载出现问题，可以更换一个镜像站点。</p>
<p>下载完成之后，我们开始安装，运行刚才下载的apache_2.2.14-win32-x86-openssl-0.9.8k.msi</p>
<p>在安装的过程中，你会看到一个让你输入服务器信息的界面</p>
<p><img class="alignnone" title="录入信息" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_001.jpg" alt="" width="403" height="309" /></p>
<p>这里要求你输入Netword Domain(网站域名)、Server Name(服务器名)、Administrator&#8217;s Email Address(管理员Email邮箱)。因为我们是用作本机测试，采用默认的即可，也可输入你的个性化信息。点击Next进入下一步，选择安装类型.</p>
<p>默认的是Tpical(典型安装)，会安装到C盘下。如果你想更改安装路径，请选择Custom（自定义安装），然后点击Next进入下一步</p>
<p><img class="alignnone" title="更改安装目录" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_002.jpg" alt="" width="403" height="309" /></p>
<p>点击“Change”更改安装目录，我选择安装到D盘：D:\Program Files\Apache Software Foundation\Apache2.2\</p>
<p>安装结束之后，我们来测试一下吧，在浏览器地址栏中输入<a href="http://localhost/">http://localhost/</a>或者<a href="http://127.0.0.1/">http://127.0.0.1/</a>。如果你看到了如下的“It Works!”，恭喜你，你已经成功安装了apache http server。</p>
<p> <img title="it works" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_003.jpg" alt="" width="330" height="183" /></p>
<p>不过为了方便以后的管理，需要更改一下默认的站点目录。apache的默认站点目录在安装目录下的htdocs文件夹下，我的在D:\Program Files\Apache Software Foundation\Apache2.2\htdocs\ 下。现在我想把站点目录更改到E:\htdocs下，首先在E盘下新建一个htdocs文件夹。然后打开apache的配置文件httpd.conf（安装目录的conf文件夹内，也可通过 开始菜单——&gt;所有程序——&gt;Apache HTTP Server 2.2——&gt;Configure Apache Server——&gt;Edit the Apache httpd.conf Configuration File 打开）</p>
<pre>把DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"改为DocumentRoot "E:/htdocs"

再把&lt;Directory "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"&gt;改为&lt;Directory "E:/htdocs"&gt;</pre>
<p>打开系统托盘里的Apache Service Moniter</p>
<p><img class="alignnone" title="apache monitor" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_004.jpg" alt="" width="531" height="336" /></p>
<p>点击Restart重启apache service即可，这时候localhost和127.0.0.1就指向了E:\htdocs</p>
<h3>安装Mysql</h3>
<p>首先去mysql的官方网站下载最新版本<a href="http://dev.mysql.com/downloads/">http://dev.mysql.com/downloads/</a></p>
<p><img class="alignnone" title="mysql" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_005.jpg" alt="" width="520" height="106" /></p>
<p>点击Current Release下的最新推荐版本(目前为MySQL5.1)进入下载页面</p>
<p><img class="alignnone" title="mysql download" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_006.jpg" alt="" width="339" height="103" /></p>
<p>点击Download选择平台Windows</p>
<p><img class="alignnone" title="mysql msi installer" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_007.jpg" alt="" width="394" height="234" /></p>
<p>这里有三个版本</p>
<p><img class="alignnone" title="三个版本" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_008.jpg" alt="" width="520" height="157" /></p>
<p>三个版本的区别如下</p>
<table border="1">
<thead>
<tr>
<th>特征</th>
<th>Essentials</th>
<th>Complete</th>
<th>Zip</th>
</tr>
</thead>
<tbody>
<tr>
<td>安装程序</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>MySQL Server 配置向导</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>测试套件</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>MySQL Server</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>MySQL Client Programs</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>C Headers/Libraries</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>Embedded Server</td>
<td>No</td>
<td>Optional</td>
<td>Yes</td>
</tr>
<tr>
<td>Scripts and Examples</td>
<td>No</td>
<td>Optional</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>选择相应版本，我选择的是Windows MSI Installer (x86)完全安装包，点击右边对应的Pick a mirror进入下载页面，点击No thanks, just take me to the downloads!即可出现下载镜像站点</p>
<p><img class="alignnone" title="mirrors" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_009.jpg" alt="" width="424" height="303" /></p>
<p>随便选择一个镜像，点击http或ftp开始下载。</p>
<p>下载完成后运行mysql-5.1.41-win32.msi进行安装，安装过程中如果需要更改安装路径，请选择Custom。安装完成的最后一步界面如下</p>
<p><img class="alignnone" title="mysql install finish" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_010.jpg" alt="" width="403" height="307" /></p>
<p>勾选configure the MySQL Serve now，开始运行MySQL配置向导，配置过程中可一路点击&#8221;Next&#8221;按照默认的配置即可，在配置字符集这一步时需要注意一下</p>
<p><img class="alignnone" title="字符集设置" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_011.jpg" alt="" width="403" height="307" /></p>
<p>我们选择“Best suport for multilingualism”，使用uft8字符集。点击“Next”</p>
<p><img class="alignnone" title="path" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_012.jpg" alt="" width="403" height="307" /></p>
<p>把“Include Bin Directory by Window Path”勾选，把MySQL的bin目录加入到系统的环境变量，这样一来我就可以直接从命令行运行MySQL的各种工具。点击“Next”</p>
<p><img class="alignnone" title="root password" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_013.jpg" alt="" width="403" height="307" /></p>
<p>输入root用户的密码，点击Next</p>
<p><img class="alignnone" title="excute" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_014.jpg" alt="" width="403" height="307" /></p>
<p>点击“Excute”开始执行前面所做的配置</p>
<p><img class="alignnone" title="finish" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_015.jpg" alt="" width="403" height="307" /></p>
<p>点击Finish完成配置</p>
<p>至此MySQL已经安装成功，你可以通过Windows开始菜单进入&#8221;MySQL Command Line Client&#8221;对数据库进行管理，也可通过接下来安装的PHPMyAdmin进行管理。</p>
<h3>安装PHP</h3>
<p>Windows环境下php安装包的下载地址为<a href="http://windows.php.net/download/">http://windows.php.net/download/</a>，目前的最新版本是5.3.1，其中有vc9版和vc6版可供选择。vc9版适合IIS，vc6版适合apache。这里我们下载VC6 x86 Thread Safe installer。</p>
<p>下载完成后运行php-5.3.1-Win32-VC6-x86.msi开始安装</p>
<p>在安装的过程中需要配置一下web服务信息</p>
<p><img class="alignnone" title="web server" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_016.jpg" alt="" width="449" height="351" /></p>
<p>因为我们之前安装的是apache2.2.14,所以我们选择第一个apache 2.2.x，点击Next</p>
<p><img class="alignnone" title="httpd.conf" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_017.jpg" alt="" width="449" height="351" /></p>
<p>选择apache配置文件的目录。这一步的作用是在apache的httpd.conf文件中加入这样一段文本（你也可以手动添加）</p>
<pre>#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "D:/Program Files/PHP/"
LoadModule php5_module "D:/Program Files/PHP/php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL</pre>
<p>安装完成后，我们来测试一下。在我们的站点目录htdocs目录下新建一个test.php文件，文件中输入下面这段php语句</p>
<pre>&lt;?php
    phpinfo();
?&gt;</pre>
<p>这条语句的作用是输出php信息。我们打开浏览器，在地址栏中输入<a href="http://localhost/test.php">http://localhost/test.php</a></p>
<p><img class="alignnone" title="phpinfo" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_018.jpg" alt="" width="520" height="346" /></p>
<p>正如我们所料，显示的是php信息，说明php已经安装成功并且能在apache上运行。</p>
<p>另外，为了能让apache默认打开index.php首页，我们需要更改一下apache的配置文件httpd.conf</p>
<pre>&lt;IfModule dir_module&gt;
    DirectoryIndex index.html
&lt;/IfModule&gt;</pre>
<p>在DirectoryIndex中加入index.php，如下</p>
<pre>&lt;IfModule dir_module&gt;
    DirectoryIndex index.html index.php
&lt;/IfModule&gt;</pre>
<h3>安装phpmyadmin</h3>
<p>下载地址<a href="http://www.phpmyadmin.net/home_page/downloads.php">http://www.phpmyadmin.net/home_page/downloads.php</a>，目前的最新版本是3.2.4</p>
<p><img class="alignnone" title="phpmyadmin3.2.4" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_019.jpg" alt="" width="520" height="244" /></p>
<p>下载phpMyAdmin-3.2.4-all-languages.zip，把下载的压缩包解压到网站的根目录(htdocs目录下)并重命名为phpmyadmin。然后在phpmyadmin文件夹下新建一个config文件夹。在浏览器的地址栏中输入<a href="http://localhost/phpmyadmin/">http://localhost/phpmyadmin/setup</a>，对phpmyadmin进行一些简单的配置</p>
<p><img class="alignnone" title="config phpmyadmin" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_020.jpg" alt="" width="520" height="523" /></p>
<p>全部都采用默认设置，点击“保存”即可。关于phpmyadmin的更高级的设置技巧，不在本文讨论范围之内，你可以继续关注本站或都从网络上搜索相关技巧。</p>
<p>然后在地址栏中输入<a href="http://localhost/phpmyadmin/index.php">http://localhost/phpmyadmin/index.php</a></p>
<p><img class="alignnone" title="save configs" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_021.jpg" alt="" width="313" height="317" /></p>
<p>输入数据库的用户名(比如root)和密码，点击执行即可连接到数据库进行管理。</p>
<p><img class="alignnone" title="mysql info" src="http://i623.domety.com/albums/tt312/baolai5/200912/wampp_022.jpg" alt="" width="520" height="272" /></p>
<p>至此，我们的wampp环境已经搭建完成。</p>
<p>如果你想更深入的学习apache+mysql+php，请继续关注本站，或者自行搜索。</p>
<ul style="color:#808080;padding:10px;border:1px solid #D7D7D7;list-style-type:none;"><li><a href="http://creativecommons.org/licenses/by/3.0/deed.zh">版权声明</a>: 转载时请以超链接形式标明文章原始出处和作者信息</li><li>本文来自: <a href="http://domety.com">Domety</a>&raquo;<a href="http://domety.com/archives/167/">《Windows下搭建apache+mysql+php平台实况直播》</a></li><li>本文链接: <a href="http://domety.com/archives/167/" title="Windows下搭建apache+mysql+php平台实况直播">http://domety.com/archives/167/</a></li><li>本文作者: <a href="http://domety.com">DDBug</a></li><li>发表时期: 十二月 6th,2009</li><li>关键字: <a href="http://domety.com/archives/tag/apache/" rel="tag">apache</a><a href="http://domety.com/archives/tag/mysql/" rel="tag">mysql</a><a href="http://domety.com/archives/tag/php/" rel="tag">PHP</a><a href="http://domety.com/archives/tag/phpmyadmin/" rel="tag">phpmyadmin</a><a href="http://domety.com/archives/tag/windows/" rel="tag">Windows</a></li></ul><p style="color=red">本站的feed地址已经更改为<a href="http://feed.domety.com/">http://feed.domety.com/</a>,请朋友们手动更改一下，谢谢</p><h2>相关文章</h2><ul><li><a href="http://domety.com/archives/213/">正则表达式一般规则</a></li><li><a href="http://domety.com/archives/198/">免费的分区管理软件EASEUS Partition Master 4.1.1</a></li><li><a href="http://domety.com/archives/208/">查看页面执行php占用内存情况</a></li><li><a href="http://domety.com/archives/173/">Windows 7 简体中文版安装及激活过程全程图解</a></li><li><a href="http://domety.com/archives/212/">wordpress博客搬家过程</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://domety.com/archives/167/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
