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

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

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

双引号,单引号问题自古以来一直处在混沌状态,不懂的人觉得没啥区别,懂的人貌似也说不出来啥区别,其实区别还是有很多,转给大家看看,自己也留一份参考 转自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

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

PHP所有函数列表

说所有函数有点夸张,有错误请指正! ...

July 15, 2014 · 3 min · Me

PHP面向对象的那些事儿

PHP的面向对象在进入5版本后得到了加强,很多好用的特性都得到了支持。下面总结了一些开发时用到的简单的概念,希望对你有帮助 ...

July 10, 2014 · 1 min · Me

PHP缓冲研究

输出缓冲是个让人头大的问题,因为它不仅牵扯到web语言本身,浏览器自身的原因也会导致无内容输出。 所以,在输出前保险的做法是先输出4096个空白字符,然后再使用缓冲输出内容,这样就可以实现程序随时输出内容啦! 以下代码chrome,FF,IE,Safari,手机chrome,UCWEB 都测试通过,需要注意的是: 在网页最开始一定要输出足够多的字符来骗过浏览器 ob_flush,flush需要一起使用 <?php //以下几个函数作用于PHP及服务器的设置,一般不需要更改 /* @apache_setenv('no-gzip', 1); @ini_set('zlib.output_compression', 0); @ini_set('implicit_flush', 1); //==ob_implicit_flush(1); */ //检测是否开启缓冲 if (ob_get_level() == 0) ob_start(); //这里的数字可变 FF:1024 CHROME:0 IE:4096 echo str_repeat(' ' ,4096); //echo str_pad('',4096)."\n"; for ($i = 1; $i<=10; $i++){ echo "Line $i<br>"; //ob_end_clean(); //如果再此打开,flush将会报错,因为清空了缓冲区 //echo ' length: '.ob_get_length(); ob_flush(); flush(); sleep(1); } echo "Done."; /* ob_end_flush(); //送出输出缓冲区内容并关闭缓冲 ob_get_clean(); //得到当前缓冲区的内容并删除当前输出缓。 ob_get_contents(); //只是得到输出缓冲区的内容,但不清除它。 ob_implicit_flush(1); //将打开或关闭绝对(隐式)刷送。绝对(隐式)刷送将导致在每次输出调用后有一次刷送操作,以便不再需要对 flush() 的显式调用。 */ /* 刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到 </table> 标记之前,不会显示出整个表格。一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。 */ 以下转自http://www....

May 21, 2014 · 1 min · Me

PHP之负载均衡下的session共用(Memcache实现)

转自http://www.cnblogs.com/see7di/p/3560329.html 此代码片段的功能是在做均衡负载的时候将session的维护工作交给Memcached,这样不仅性能上来了,session不同步的问题也解决了! 但是要求做Memcache的计算机内存要足够大! $_ENV=array( 'SYS'=>array( 'Memip'=>'127.0.0.1', //MEMCACHE的ip 'Mempt'=>11211, //MEMCACHE的port 'Memtim'=>10, //MEMCACHE的超时时间 ) ); //托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确 final class S{ public static function open(){ //禁止session自动开启 session_write_close(); ini_set('session.auto_start',0); //使用五十分之一的概率启动GC清理会话 ini_set('session.gc_probability',1); ini_set('session.gc_divisor',50); ini_set('session.use_cookies',1); //session的寿命 //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']); //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']); //ini_set('session.save_handler','files'); //ini_set('session.save_path',Run.'_tmp'); //ini_set('session.save_handler','memcache'); //ini_set('session.save_path','tcp://127.0.0.1:11211'); //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime'); //建立memcache对象 $_ENV['S_mem']=new Memcache; $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache连接失败!'); return TRUE; } /** 读取 返回:读到的内容 /**/ public static function read($id){ return $_ENV['S_mem']->get('s_'.$id); } /** 写入 返回:bool /**/ public static function write($id,$data){ return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']); } /** 关闭 返回:bool /**/ public static function close(){ $_ENV['S_mem']->close(); unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']); return TRUE; } /** 删除 返回:bool /**/ public static function destroy($id){ return $_ENV['S_mem']->delete('s_'....

May 19, 2014 · 1 min · Me

PHP清除html格式

做采集的都知道,一般采集过来的内容难免会带有html标签,如果有太多的标签会影响之后的数据分析或提取,所以需要过滤掉!PHP已经为我们提供了很多清除html格式的方法了,下面就让老高介绍一下。 strip_tags strip_tags($str) 去掉 HTML 及 PHP 的标记 语法: string strip_tags(string str); 传回值: 字串 函式种类: 资料处理 内容说明 : 解析:本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的 HTML 及 PHP 标签原来就有错,例如少了大于的符号,则也会传回错误。这个函数和 fgetss() 有着相同的功能 例子 echo strip_tags("Hello <b>world!</b>"); # Hello world! htmlspecialchars 这个函数把html中的标签转换为html实体,博客的代码展示就必须使用这个函数,要不贴出来的代码就会被执行了。 预定义的字符是: & (和号) 成为 & ” (双引号) 成为 ” ‘ (单引号) 成为 ‘ < (小于) 成为 < > (大于) 成为 > 例子 $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; # &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; # 如果需要展现<br>,那么浏览器解析HTML的时候会自动将他变为换行 # 但是通过htmlspecialchars就可以让< 变为 &#039; 与htmlspecialchars功能相反的函数是htmlspecialchars_decode,他会把HTML实体转化为字符!...

May 18, 2014 · 2 min · Me

PHP方法总结

编程时间长了,大家见过很多函数功能吧,比如获取用户IP等等,现在我将常用的PHP函数做个总结,方便大家COPY和使用。 <?php //获取用户IP function getIp() { $ip = ""; if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknow')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('REMOTE_ADD') && strcasecmp(getenv('REMOTE_ADD'), 'unknow')) { $ip = getenv('REMOTE_ADD'); } elseif (isset($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknow')) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } //快速替换字符串 //$arrayName = array('h'=>'s','o'=>'t','l'=>'xx'); //echo strsReplace('hello',$arrayName); function strsReplace($str, $replaces) { $subject=$str; foreach ($replaces as $k => $v) $subject = str_replace($k, $v, $subject); return $subject; } //规范文件名 //$filename='"<>/\\\asda/.,psd|"'; //echo tripFilename($filename); function tripFilename($filename) { //$s=array("/","\\","?...

April 10, 2014 · 4 min · Me