2017年9月

正则表达式的贪婪与懒惰

为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)ab(第四到第五个字符)

- 阅读剩余部分 -

正则表达式短横线"-"的转义写法示例

一直以为正则方括号内的短横线是要转义的,例:

[a-z\-]

其实“-”在紧挨边界的时候不需要转义,也就是说可以写成:

[a-z-] 或 [-a-z]

经过自己验证,我们暂且称“a-z”为“组”,结论是“在方括号边界或是组边界的都不需要转义。”

[a-z-0-9]

再试一试发现这样也可以,这样结论又变成“只要短横线(-)不能构成组,就可以不专一”,不知道这样说是否严密。

[a-z!-0-9] 或 [a-z!-@0-9]

- 阅读剩余部分 -

RegexBuddy 4.7.0 x64 评估试用到期,无限试用的办法

昨天打开RegexBuddy,它是我经常写正则表达式用的一款工具,发现试用到期了,网上搜索了一下,没有所谓的绿色版、破解版等,到官网看了下价格,是国外支付网站,立马关了,然后自己动手找"时间"的位子。

使用工具:VMware 虚拟机,TUPortable

操作系统:win7

最后对比发现,在注册表 HKEY_USERS 节点下存在一个用户的项,形如 "S-1-5-21-1609450999-942198704-3306705913-1000",标识当前用户(HKEY_CURRENT_USER),我的系统是这个:

Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-21-1609450999-942198704-3306705913-1000\Software\JGsoft\RegexBuddy4\Demo]

"Date"=dword:0000a72b

"Days"=dword:00000000

"Msg"=dword:00000000

[HKEY_USERS\S-1-5-21-1609450999-942198704-3306705913-1000\Software\Microsoft\Windows Search]

"Advanced2"=dword:0000a72b

[HKEY_USERS\S-1-5-21-1609450999-942198704-3306705913-1000\Software\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences]

"Advanced2"=dword:0000a72b

 

- 阅读剩余部分 -

Nginx proxy_set_header 理解

用户认证接口:根据客户端IP和port,进行IP反查和端口范围确认,如符合则用户认证通过。
当前使用的是Nginx负载均衡,从客户端到Nginx端 ip和port都对,从Nginx到应有服务器上-port端口变成很奇怪的端口号。
疑问:Nginx往应有服务器上 是如何 传递 客户端IP和port 参数的呢?
请看 Nginx proxy_set_header

Nginx proxy_set_header
允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。在没有定义proxy_set_header时会继承之前定义的值。默认情况下,只有两个字段被重定义:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

如果启用缓存,来自之前请求的头字段“If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”, “If-Match”, “Range”, 和 “If-Range” 将不会被代理服务器传递。
一个不会变化的“Host”头请求字段可通过如下方式被传递:

proxy_set_header Host       $http_host;

然后,当字段不在请求头中就无法传递啦。在这种情况下,可通过设置Host变量,将需传递值赋给Host变量。

proxy_set_header Host       $host;

此外,服务器名称和端口一起通过代理服务器传递。

proxy_set_header Host       $host:$proxy_port;

如果请求头的存在空的字段将不会通过代理服务器传递出去。

proxy_set_header Accept-Encoding "";

总结:proxy_set_header 就是可设置请求头-并将头信息传递到服务器端。不属于请求头的参数中也需要传递时 重定义下就行啦。

- 阅读剩余部分 -

浅谈什么是正向代理和反向代理,如何使用nginx搭建正向代理和反向代理

1.正向代理的概念

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

 

2.反向代理的概念

反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
简单的区别方法:正向代理就是我们在浏览器可以设置的代理服务器,主动权在浏览者手里。比如我们有时候要查阅一些资料,被国内墙掉了,这时候我可以在国外的服务器上搭建一个nginx正向代理服务器,然后我们就可以通过浏览器设置代理服务器,来翻墙了。反向代理,是浏览者不知情的,服务器端自己假设的。

 

- 阅读剩余部分 -

Gdrive:Linux下同步Google Drive文件、自动备份网站到Google Drive

Gdrive,Linux下上传、下载Google Drive文件的一款CLI工具,安装简单、使用方便。

操作演示:

安装Gdrive:(SSH下,基于centos 7)

1、安装

  1. wget -O /usr/bin/gdrive "https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download"
  2. chmod +x /usr/bin/gdrive

2、授权

  1. gdrive about

然后会出现一串网址并询问验证码:

about-code

将地址粘贴到浏览器并登陆账号,会返回一串代码

code

- 阅读剩余部分 -

xtrabackup备份和还原

基础信息
1) CentOS 7
2) MySQL 5.7.12
3) 数据量4.4G
使用mysqldump对4.4G的数据导出->导入所需时间>60分钟,也可能是我方式方法不对,导入时间消耗长。

  1. xtrabackup介绍
    xtrabackup一个开源免费的工具,用于对MySQL数据库的备份和还原。它还有一个用perl写的封装脚本,可以提供更多高级功能(如:流、增量、压缩和多线程备份操作)。
    xtrabackup工作方式是后台线程不断追踪InnoDB日志文件尾部,然后复制InnoDB数据文件,InnoDB内有事务日志,可保证所有数据文件一致性。
  2. xtrabackup 安装
    xtrabackup当前最新版本为2.4.4,支持MySQL server 5.7.13
    官网地址:https://www.percona.com
    使用percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
    #yum install libev
    #rpm -ivh ppercona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
    # xtrabackup --version
    xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)

- 阅读剩余部分 -

使用xtrabackup进行MySQL数据库备份

前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了。而使用lvm快照功能对数据库进行备份,可以实现几乎热备的功能,但备份过程较为复杂,不过现在倒是有个工具mylvmbackup可以实现自动化备份。

前面我们也说道,使用物理备份时最快的,那有没有办法实现物理热备呢?

目前主流的有两个工具可以实现热备:ibbackup和xtrabackup;ibbackup是商业软件,没服务器授权为5000美元,非常昂贵。而xtrabackup功能比ibbackup还要强大,但却是开源的。因此我们这里就来介绍xtrabackup的使用。

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

  • (1)备份过程快速、可靠;
  • (2)备份过程不会打断正在执行的事务;
  • (3)能够基于压缩等功能节约磁盘空间和流量;
  • (4)自动实现备份检验;
  • (5)还原速度快;

- 阅读剩余部分 -

meiyoutongji