PHP正则表达式的模式修正符

PHP在处理正则表达式的时候,在最后面可以加上诸如/i, /is, /s, /isU的选项,他们都代表什么含义呢? 其实他们是PHP正则表达式的模式修正符,用于对正则表达式的补充。 [TOC] 优先级概念 正则符号的优先级: ()圆括号因为是内存处理所以第1 * ? + { } 重复匹配内容第2 ^ $ \b 边界处理第3 | 条件处理第4 最后按照运算顺序计算匹配 常用的修正符 i (PCRE_CASELESS)正则内容在匹配时候不区分大小写(默认是区分的)。 如preg_match('/\[TOC\]/i',$str) 这句话中的小写字母i,他跟在正则表达式后面,起的作用是匹配时忽略大小写 所以,上述正则表达式可以匹配诸如 [toc]、[ToC]、或者[TOC]。 m (PCRE_MULTILINE) 在匹配首内容或者尾内容时候采用多行识别匹配。默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)。这和 Perl 是一样的。 当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“/n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。 S (PCRE_DOTALL) 如果没有使用这个模式修正符号,元字符中的".“默认不能表示换行符号,将字符串视为单行。如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。 x (PCRE_EXTENDED) 忽略正则中的空白。如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两头,也都被忽略。 A (PCRE_ANCHORED) 强制从头开始匹配。如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配即自动在模式开头加上^。此效果也可以通过适当的模式本身来实现(在 Perl 中实现的唯一方法)。 D (PCRE_DOLLAR_ENDONLY) 强制$匹配尾部无任何内容。如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。 S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。...

July 25, 2014 · 1 min · Me

typecho的优化设置

[TOC] typecho的出现让我终结了使用多年的WP,小巧的体积,不错的速度 markdown支持 如果你还不懂markdown语法,请参考markdown语法 由于typecho使用了md语法,那么强烈推荐这篇文章,为你的博客加入目录功能 伪静态 如果想让你的博文地址变成这个样子www.phpgao.com/typecho.html,那就需要开启地址重写功能,俗称伪静态。 这样需要在新链接形式和旧链接形式间做一些转换,而转换的规则就定义在.htaccess或httpd.ini文件里! linux的下的.htaccess可以直接参考WP的配置,而windows下的IIS请参考如下配置,将下面的代码拷贝至httpd.ini文件,放置到web根目录下 [ISAPI_Rewrite] # 3600 = 1 hour CacheClockRate 3600 RepeatLimit 32 RewriteRule ^/(admin|usr)/(.*) /$1/$2 [L] RewriteRule ^/(.*).html$ /index.php/$1.html [L] RewriteRule ^/archives/(.*) /index.php/archives/$1 [L] RewriteRule ^/category/(.*) /index.php/category/$1 [L] RewriteRule ^/author/(.*) /index.php/author/$1 [L] RewriteRule ^/([0-9]+)/([0-9]+)/$ /index.php/$1/$2/ [L] RewriteRule ^/tag/(.*)/$ /index.php/tag/$1 [L] RewriteRule ^/search/(.*)/$ /index.php/search/$1 [L] RewriteRule ^/(.*)page/(.*) /index.php/$1page/$2 [L] RewriteRule ^/(feed.*) /index.php/$1 [L] RewriteRule ^/action/(.*) /index.php/action/$1 [L] RewriteRule ^/(.*)comment /index.php/$1/comment [L] RewriteRule ^/sitemap /index.php/sitemap [L] RewriteRule ^/go/(....

July 25, 2014 · 1 min · Me

php将image转换为base64编码

引用PHP手册里的一评论 This will greatly reduce your page load time as the browser will only need to send one server request for the entire page, rather than multiple requests for the HTML and the images. Requests need to be uploaded and 99% of the world are limited on their upload speed to the server. 翻译一下就是 这种方式能够大大减少页面载入时间,因为整个页面只需要一个请求,多个针对html文档和图片的请求。请求需要被提(上)交(传),但是99%的上传速度是被限制的。 所以减少请求也是一个明确的选择! ...

July 25, 2014 · 1 min · Me

让typecho支持table-of-contents

什么是toc? [toc] table of contents 即文章目录 toc有什么用 废话,你说目录有啥用,方便查找呗 使用typecho的TX,一定会一点markdown吧,在文章中如果出现##this's h2 tag##,会被程序转换为 <h2>this's h2 tag</h2> 一个h标签就好比一本书的各个章节,如果我们能把他们清点一下,组成一个目录输出,岂不是妙哉! TOC如何使用 简单到不能再简单,在你想插入目录的地方放一个[toc]或[TOC]即可(推荐大写)! [TOC]必须处于顶格 typecho中的markdown typecho的源代码中已经使用了激进的MarkdownExtraExtended类来转化md文件,为什么说他很激进呢?因为他扩展了标准的markdown,添加了很多个性化的语法,如直接给元素添加id或者class,还有脚注、缩写词等,用起来确实很爽!但需要注意的是:太多的非标准语法可能会带来移植性差的问题 具体的语法参考请看这里php Markdown Extra 如何使typecho支持toc 要使typecho支持toc需要替换位于源程序中的/wwwroot/var/文件夹下的MarkdownExtraExtended.php 为 MarkdownExtraExtended.php 原理 这个文件的作用就是为typecho提供md2html的作用,我修改了MarkdownExtraExtended类的__construct方法,为block_gamut数组添加了 doToc 处理模块,并把优先级降到最低。 转换细节位于doToc与_doToc_callback中,在此不作赘述。 不完美的地方 要是能加入一个锚点之间平滑滚动的效果就更完美了,改天写个插件弄一弄 在首页也能看到目录,改天看看源代码研究一下,看能不能解决 希望后台加一个选项,自动生成目录,这个比较麻烦,以后看情况解决

July 24, 2014 · 1 min · Me

单引号和双引号的区别及用法

双引号,单引号问题自古以来一直处在混沌状态,不懂的人觉得没啥区别,懂的人貌似也说不出来啥区别,其实区别还是有很多,转给大家看看,自己也留一份参考 转自http://blog.sina.com.cn/s/blog_706476980100xapp.html 1.单引号和双引号都可以作为字符串的开始符和关闭符,并且只能‍同一种单或者双引号来定义开始和结束;单引号之间的字符都被认为是字符,即使是转义符\和变量符$,例外的是\’标识单引号。 2.双引号之间的字符是需要php解析的,包括$,\,{都保留了php赋予的特殊含义。 3." “双引号里面的字段会经过编译器解释,然后再当作HTML代码输出;而' ‘单引号里面的不进行解释,直接输出。 例如: $abc='my name is tome'; echo $abc //结果是:my name is tom echo '$abc' //结果是:$abc echo "$abc" //结果是:my name is tom 特别在使用MYSQL语句的时候,双引号和单引号的用法让新手不知所措,在这里,举个例子,来进行说明。 假设查询条件中使用的是常量,例如: select * from abc_table where user_name='abc'; SQL语句可以写成: SQLstr = "select * from abc_table where user _name= 'abc'" ; 假设查询条件中使用的是变量,例如: $user_name = $_REQUEST['user_name']; //字符串变量 或 $user=array ("name"=> $_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//数组变量 SQL语句就可以写成: SQLstr = "select * from abc_table where user_name = ' " . $user_name . " ' "; SQLstr = "select * from abc_table where user_name = ' " . $user["name"] . " ' "; 对比一下: SQLstr="select * from abc_table where user_name = ' abc ' " ; SQLstr="select * from abc_table where user_name =' " . $user _name . " ' "; SQLstr="select * from abc_table where user_name =' " . $user["name"] . " ' "; SQLstr可以分解为以下3个部分: 1:"select * from table where user_name = ' " //固定SQL语句 2:$user //变量 3:" ' " 1,2,3部分字符串之间用"." 来连接 ...

July 22, 2014 · 4 min · Me

正则表达式教程

正则表达式入门 概念 字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 支持 在最近的六十年中,正则表达式逐渐从模糊而深奥的数学概念,发展成为在计算机各类工具和软件包应用中的主要功能。不仅仅众多UNIX工具支持正则表达式,近二十年来,在WINDOWS的阵营下,正则表达式的思想和应用在大部分 Windows 开发者工具包中得到支持和嵌入应用!从正则式在Microsoft Visual Basic 6 或 Microsoft VBScript到.NET Framework中的探索和发展,WINDOWS系列产品对正则表达式的支持发展到无与伦比的高度,几乎所有 Microsoft 开发者和所有.NET语言都可以使用正则表达式。如果你是一位接触计算机语言的工作者,那么你会在主流操作系统(*nix[Linux, Unix等]、Windows、HP、BeOS等)、主流的开发语言(PHP、C#、Java、C++、VB、Javascript、Ruby以及python等)、数以亿万计的各种应用软件中,都可以看到正则表达式优美的舞姿。 以上内容引自百度百科 ...

July 22, 2014 · 2 min · Me

Python程序监控脚本

有些软件虽然卖的很贵,但是稳定性还是让人很无语,经常莫名其妙的崩溃,生产服务器怎么能允许这种事情发生! 一个监控程序运行的就这样诞生了,程序Python 2.7 思路很简单,先写一个监控的函数,判断是否在运行,然后循环调用N次,直到运行成功,实在不行,就发个通知或者记录下来 难点在于如何判断进程在运行。 思路也很简单,主要用到了这两个方法 os.popen os.system 他们两个都可以直接运行cmd或者shell中的命令,但是前者会返回输出的内容,可以做进一步的处理 而后者只是执行,并把结果打印出来。 下面是程序,注释已经很清晰了 #coding=utf-8 """ To check program if it is running @author PHPergao @time 2014-7-22 """ import re import os import time import urllib2 import urllib flag = 1 #check function def checkhct(): #tasklist也可换成linux下打印所有进程的命令 ps aux for line in os.popen('tasklist').readlines(): #判断用正则更准确,也可以使用find或者index判断 pattern = re.compile(r'qq.*', re.I) match = pattern.match(line) if(match): return True return False #repeat 3 times for x in xrange(0,3): if(checkhct() == False): print 'error' #程序路径 os....

July 22, 2014 · 1 min · Me

西安的羽毛球馆汇总

西安市羽毛球场馆目录 从百度贴吧转来的,有些信息不全,希望知道的TX做个补充 老高一般在西稍门江虹打球,欢迎交流! 石羊农庄羽羽毛球馆 球馆地址:雁翔路石羊农庄内(理工大学新校区南) 球馆概况:塑胶地面 12片场地 联系电话:85507505 老江虹羽羽毛球馆 球馆地址:西稍门外十字西100米 球馆概况:龙骨木地板 12片场地 联系电话:84260099 ...

July 19, 2014 · 2 min · Me

IOScydia源推荐

转自手机中国论坛 apt.178.com——————178第一中文源 我个人是推荐大家用这个的。。功能很多很强大 cydia.51ipa.com—————-很著名的51国产源。 cydia.xsellize.com—————必备的源~ www.sinfuliphonerepo.com—-大量PJ软件源。 cydia.clezz.com——————-大量PJ软件源。 cy.sosiphone.com—————-PJ软件源。 kuaidial.googlecode.com/svn/deb——————-软件kuaidial的官方源。 cydia.myrepospace.com/wi-inputmethod———-WI输入法官方源 cydia.myrepospace.com/wiim————————WI输入法官方源 i.danstaface.net/deb————-下载vWallpaper官方源 iphonedelivery.advinux.fr/cydia——–下载iphonedelivery短信回执官方源 cydia.sogou.com——————搜狗输入法官方源 mi.baidu.com———————–百度输入法官方源 DownLoad.voicecloud.cn/Cydia/———————讯飞语音输入法官方源 beta.notifiedapp.com————下载Notified Pro 官方源 cydia.myrepospace.com/pw5a29ip4—————Temperaturization 官方源 apt.25pp.com———————- pp助手官方源

July 19, 2014 · 1 min · Me

netbeans开启xdebug

一直在用everedit做开发,今天开始高大上,用一下netbeans 安装 在netbeans下载页面找到PHP版的netbeans,下载下来并安装,表忘了JRE也要装的 在xdebug下载页面下载对应PHP版本的xdebug,然后解压至php目录下的ext目录下,同时新建d:\xdebug文件夹 配置 PHP.INI 在phpinfo()页面中找到INI文件,在文件最后加入以下代码 ;注意:我们的版本号可能不同 zend_extension="ext\php_xdebug-2.2.5-5.4-vc9.dll" [Xdebug] ;是否开启自动跟踪 xdebug.auto_trace= On ;是否开启异常跟踪 xdebug.show_exception_trace= On ;是否开启远程调试自动启动 xdebug.remote_autostart= On ;是否开启远程调试 xdebug.remote_enable= On ;允许调试的客户端IP ;xdebug.remote_host= 192.168.1.1 ;远程调试的端口(默认9000) xdebug.remote_port=9000 ;调试插件dbgp xdebug.remote_handler=dbgp ;是否收集变量 xdebug.collect_vars= On ;是否收集返回值 xdebug.collect_return= On ;是否收集参数 xdebug.collect_params= On ;跟踪输出路径 xdebug.trace_output_dir="d:\xdebug" ;是否开启调试内容 xdebug.profiler_enable=On ;调试输出路径 xdebug.profiler_output_dir="d:\xdebug" ;调试的域名 xdebug.remote_host=localhost 修改以后重启服务器,看看有没有出现xdebug,如果出现了,那就成功了一大半 netbeans 设置的地方在tool->option里找到debug标签,在这里可以修改PHP.EXE的路径,还有调试的工具和端口号等。 注意 如果你用的远程调试,务必打开xdebug.remote_enable 如果你用的域名调试,那么请修改xdebug.remote_host为你的域名,不要忘了加引号,不用带http:// 如果总是显示等待xdebug,那么就换一个web浏览器试试,在tool->option->general里可以找到 如果还不行,请留言,老高和你一起搞! 调试 哈哈,这还用讲吗?上个图

July 18, 2014 · 1 min · Me