霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

正则表达式助记口诀

正则是每个程序员绕不开的堡垒,只有把它攻下来。我觉得正则之所以难,第一难是需要记忆,第二难是要求具备抽象逻辑思维。签于网上太多的介绍都是一篇凶悍的短文,边看边理解可以,帮助记忆不行。又受五笔字型字根表口诀“白手看头三二斤…”的启发,试作正则表达式助记口诀”又名“正则打油诗”。

注:本文仅为学习正则时为了便于记忆而作,不能代替系统而全面的学习过程,错漏之处,敬请指正!

正则其实也势利,削尖头来把钱揣; (指开始符号^和结尾符号$)
特殊符号认不了,弄个倒杠来引路; (指\. \*等特殊符号)
倒杠后面跟小w, 数字字母来表示; (\w跟数字字母;\d跟数字)
倒杠后面跟小d, 只有数字来表示;
倒杠后面跟小a, 报警符号嘀一声;
倒杠后面跟小b, 单词分界或退格;
倒杠后面跟小t, 制表符号很明了;
倒杠后面跟小r, 回车符号知道了;
倒杠后面跟小s, 空格符号很重要;
小写跟罢跟大写,多得实在不得了;
倒杠后面跟大W, 字母数字靠边站;
倒杠后面跟大S, 空白也就靠边站;
倒杠后面跟大D, 数字从此靠边站;
倒框后面跟大B, 不含开头和结尾;

单个字符要重复,三个符号来帮忙;   (* + ?)
0 星加1 到无穷,问号只管0 和1;   (*表0-n;+表1-n;?表0-1次重复)
花括号里学问多,重复操作能力强;   ({n} {n,} {n,m})
若要重复字符串,园括把它括起来;   ((abc){3} 表示字符串“abc”重复3次 )

特殊集合自定义,中括号来帮你忙;
转义符号行不通,一个一个来排队;
实在多得排不下,横杠请来帮个忙;   ([1-5])
尖头放进中括号,反义定义威力大;   ([^a]指除“a”外的任意字符 )

1竖作用可不小,两边正则互替换;    (键盘上与“\”是同一个键)
1竖能用很多次,复杂定义很方便;

园括号,用途多;
反向引用指定组,数字排符对应它;   (“\b(\w+)\b\s+\1\b”中的数字“1”引用前面的“(\w+)”)
支持组名自定义,问号加上尖括号;   (“(?<Word>\w+)”中把“\w+”定义为组,组名为“Word”)

园括号,用途多,位置指定全靠它;
问号等号字符串,定位字符串前面;   (“\b\w+(?=ing\b)”定位“ing”前面的字符串)
若要定位串后面,中间插个小于号;   (“(?<=\bsub)\w+\b”定位“sub”后面的字符串)

问号加个惊叹号,后面跟串字符串;
PHPer都知道, !是取反的意思;
后面不跟这一串,统统符合来报到;   (“\w*d(?!og)\w*”,“dog”不符合,“do”符合)

问号小于惊叹号,后面跟串字符串;
前面不放这一串,统统符合来报到;

点号星号很贪婪,加个问号不贪婪;
加号问号有保底,至少重复一次多;
两个问号老规矩,0次1次团团转;
花括号后跟个?,贪婪变成不贪婪;

还有很多装不下,等着以后来增加。

转自 http://www.phpchina.com/31261/viewspace_16134.html

PHP分页类发布,支持自定义风格,默认4种显示模式(下)

PHP分页类发布,支持自定义风格,默认4种显示模式。接上篇文章

PHP分页类发布,支持自定义风格,默认4种显示模式(上)

一个类似于百度的分页类,可能代码有点老,但仍可用。可以自定义样式和风格。转自:phpchina

1、增加了对ajax分页的功能

2、优化了程序整体结构

3、增加了自定义风格的功能

 

代码如下:

Read more ›

php面向对象设计模式之观察者模式

问题:
假如一个小贩, 他把产品的价格提升了, 不同的消费者会对此产生不同的反应。一般的编程模式无非是获取提升的价格,然后获取所有的消费者,再循环每个消费者, 不同的消费者根据价格涨幅做出决定,如果消费者的类型有限,因而进行的判断也不多,这种无可厚非,但如果有更多的类型的消费者加入进来, 那这个代码就变得臃肿且难以维护, 因为要不停的往里面加入判断代码,这个时候其实就适用观察者模式了

思路:
观察者模式分为两个角色, 观察者(observer)和被观察者(observables), 先在被观察者注册一系列的被观察者, 在被观察者发生变化的时候,通知观察者,进而观察者自动进行更新,这种一对多的关系就像你是一个小贩(被观察者),卖东西,有很多人(观察者)在买你的东西,假如你要升价, 这个时候所有的消费者(观察者)可以决定继续买,还是不买,还是其他动作,作为小贩(被观察者)的你只需要把价格增加,继而通知一下,而不用去管其他人(观察者)的动作。 Read more ›

Git详解之服务器上的Git

服务器上的 Git

到目前为止,你应该已经学会了使用 Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的 Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度。另外,你也一定希望合作者们即使在 自己不开机的时候也能从仓库获取数据 — 拥有一个更稳定的公共仓库十分有用。因此,更好的合作方式是建立一个大家都可以访问的共享仓库,从那里推送和拉取数据。我们将把这个仓库称为 “Git 服务器”;代理一个 Git 仓库只需要花费很少的资源,几乎从不需要整个服务器来支持它的运行。

架设一台 Git 服务器并不难。第一步是选择与服务器通讯的协议。本章第一节将介绍可用的协议以及各自优缺点。下面一节将介绍一些针对各个协议典型的设置以及如何在服务器 上实施。最后,如果你不介意在他人服务器上保存你的代码,又想免去自己架设和维护服务器的麻烦,倒可以试试我们介绍的几个仓库托管服务。

如果你对架设自己的服务器没兴趣,可以跳到本章最后一节去看看如何申请一个代码托管服务的账户然后继续下一章,我们会在那里讨论分布式源码控制环境的林林总总。

远程仓库通常只是一个_裸仓库(bare repository)_ — 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说,裸仓库就是你工作目录中.git 子目录内的内容。

Read more ›

Git详解之Git分支

Git 分支

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。

有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。
Read more ›