ip地址正则验证

IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用英文句点“.”隔开。例如:某台计算机IP地址为10.11.44.100。

分析IP地址的组成特点:250-255、200-249、0-199。
这三种情况可以分开考虑,
1. 250-255:特点:三位数,百位是2,十位是5,个位是0~5,用正则表达式可以写成:25[0-5]
2. 200-249:特点:三位数,百位是2,十位是0~4,个位是0~9,用正则表达式可以写成:2[0-4]\d
3. 0-199:这个可以继续分拆,这样写起来更加简单明了.
3.1. 0-9: 特点:一位数,个位是0~9,用正则表达式可以写成:\d
3.2. 10-99: 特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9]\d
3.3. 100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成:1\d{2}

于是0-99的正则表达式可以合写为[1-9]?\d,那么0-199用正则表达式就可以写成(1\d{2})|([1-9]?\d),这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
最后,前面3段加上句点.可以使用{3}重复得到,第4段再来一次同样的匹配,得到IP地址的正则表达式:

((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

与大家互动一下:

1. 为什么三位数的匹配放在二位数/一位数的前面?因为正则表达式规则之一:最先开始的匹配拥有最高的优先权。
2. 0.0.0.0和255.255.255.255是合法存在的IP地址,你知道是为什么吗?
3. 192.169.01.108这种数字前面多带了个0的类型的,在这里不是合法的,为什么要这样?
4. 为什么前面在最前面要有?:呢?它在这里有什么用?
5. 如果您发现本表达式有错误,也请留言指正!

我使用的正则表达式验证工具,The Regulator 下载地址:http://sourceforge.net/projects/regulator/

发表在 面试题 | 留下评论

单例

SingleTon::getInstance();
SingleTon::getInstance();
SingleTon::getInstance();

class SingleTon{
private static $instance;
public function __clone(){
}
protected function __construct(){
}
public static function getInstance(){
if( ! self::$instance || !(self::$instance instanceof SingleTon) ){
self::$instance = new self();
echo 'this is a new instance.' . PHP_EOL;
}else{
echo 'this is a old instance.' . PHP_EOL;
}
return self::$instance;
}
}

发表在 DesignPattern, 面试题 | 留下评论

php pcntl_fork Mysql Server has gone away

http://yorker.blog.51cto.com/8038263/1365276

http://blog.csdn.net/djvc/article/details/31379155

发表在 异常解决办法 | 留下评论

PHP异步并发访问mysql简单实现

http://www.huyanping.cn/php%E5%BC%82%E6%AD%A5%E5%B9%B6%E5%8F%91%E8%AE%BF%E9%97%AEmysql%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0/

发表在 涨姿势 | 留下评论

cms应具备的功能

1、可以发布文章、页面
2、分类,应用于文章、页面
3、日志系统,包括管理员操作日志,系统异常错误日志
4、系统参数配置,如管理员个人信息、系统信息
5、缓存,opcache、静态文件缓存
6、权限控制
7、单元测试,这个为后续扩展功能,已经回归测试提供重要依据
8、路由功能,自定义路径
9、文章评论
10、多语言切换
11、系统主题切换
12、定时任务调度
13、文章、页面搜索
14、图片及文件上传

发表在 想做但是没做的 | 留下评论

sublime 3 mac快捷键(转载)

⌘:command 
⌃:control 
⌥:option 
⇧:shift 
↩:enter 
⌫:delete 
打开/关闭/前往

快捷键 功能 
⌘⇧N 打开一个新的sublime窗口 
⌘N 新建文件 
⌘⇧W 关闭sublime,关闭所有文件 
⌘W 关闭当前文件 
⌘P 跳转、前往文件、前往项目、命令提示、前往method等等(Goto anything) 
⌘⇧T 重新打开最近关闭的文件 
⌘T 前往文件 
⌘⌃P 前往项目 
⌘R 前往method 
⌘⇧P 命令提示 
⌃G 前往行 
⌘KB 开关侧栏 
⌃` 打开控制台 
⌃- 光标跳回上一个位置 
⌃⇧- 光标恢复位置 
编辑

快捷键 功能 
⌘A 全选 
⌘L 选择行(重复按下将下一行加入选择) 
⌘D 选择词(重复按下时多重选择相同的词进行多重编辑) 
⌃⇧M 选择括号的内容 
⌘⇧↩ 在当前行前插入新行 
⌘↩ 在当前行后插入新行 
⌃⇧K 删除行 
⌘KK 从光标处删除至行尾 
⌘K⌫ 从光标处删除至行首 
⌘⇧D 复制(多)行 
⌘J 合并(多)行 
⌘KU 改为大写 
⌘KL 改为小写 
⌘C 复制 
⌘X 剪切 
⌘V 粘贴 
⌘/ 注释 
⌘⌥/ 块注释 
⌘Z 撤销 
⌘Y 恢复撤销 
⌘⇧V 粘贴并自动缩进 
⌘⌥V 从历史中选择粘贴 
⌃M 跳转至对应的括号 
⌘U 软撤销(可撤销光标移动) 
⌘⇧U 软重做(可重做光标移动) 
⌘⇧S 保存所有文件 
⌘] 向右缩进 
⌘[ 向左缩进 
⌘⌥T 特殊符号集 
⌘⇧L 将选区转换成多个单行选区 
查找/替换

快捷键 功能 
⌘f 查找 
⌘⌥f 查找并替换 
⌘⌥g 查找下一个符合当前所选的内容 
⌘⌃g 查找所有符合当前选择的内容进行多重编辑 
⌘⇧F 在所有打开的文件中进行查找 
拆分窗口/标签页

快捷键 功能 
⌘⌥[1,2,3,4] 单列、双列、三列、四列 
⌘⌥5 网格(4组) 
⌃[1,2,3,4] 焦点移动到相应的组(分屏编号) 
⌃⇧[1,2,3,4] 将当前文件移动到相应的组(分屏编号) 
⌘[1,2,3,4] 选择相应的标签页 
快捷操作

快捷键 功能 
⌘⌃上下键 两行交换位置 
⌘KB 显示/隐藏侧边
发表在 小技巧 | 留下评论

sublime 开启vim模式

在菜单栏中: Preferences -> Setting – User ,即可打开配置文件进行编辑,将 ignored_packages 项的[]里面内容清空:

“ignored_packages”:
 [
 ]

这样就启用了 Vim 模式,按 Esc 退出编辑模式,即进入了 Vim 模式。

发表在 小工具 | 留下评论

PDOException: SQLSTATE[HY000] [2002] No such file or directory

mac下将localhost改成127.0.0.1就OK了。

发表在 异常解决办法 | 留下评论

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql 5.7版本安装后,首次操作,总是报错:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

解决办法:
mysql> SET PASSWORD = PASSWORD(‘root’);
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> ALTER USER ‘root’@'localhost’ PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

发表在 异常解决办法 | 评论关闭

mac下安装php扩展报错

/Users/wenzg/local/php/bin/phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决办法:
brew install autoconf

发表在 php异常 | 留下评论