正则表达式边界符妙用

在php中,使用正则表达式,按道理来说,其边界符可以是任意字符,只要前后对应都可以的。通常我们会使用 “/”,但是在特殊情况下,使用这个“/” 就会出问题了,代码如下:
<?php
$html = "hello<script>alert(123)</script>world";
$str = preg_replace(
			array(
				"/<script[^>]*?>.*?</script>/si"
			), 
			array(
				""
			), 
			$html
		);
var_dump($str);
?>
在这样的代码中会出现一个错误:
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'c' in D:\WAMP\www\test\html.php on line 11
原因是上面的正则表达式出现异常了,把下面的代码替换就会正常执行
"/<script[^>]*?>.*?</script>/si"
"'<script[^>]*?>.*?</script>'si" 

因为在上面代码中的正则表达式里有</script>中有 / ,所以程序会认为这个正则表达式已经结束,其实后面还有代码,所以为出错。 

总之,其边界符虽然可以比较随意的使用,没有固定的限制,但是还是得多多注意,有时候随意不得。

29
Feb 2012
AUTHOR WiFeng
CATEGORY Web
COMMENTS 1 Comment

安装php扩展:Xdebug

之前一直没有使用xdebug,程序依然跑的飞快。但是对于底层怎么解析、处理写的这些php程序呢?不知道。xdebug或许可以对你有帮助。

xdebug 是 php的一个扩展库,需要专门安装才可以使用。以下介绍windows平台的安装过程。

1、下载xdebug扩展
打开 http://xdebug.org/download.php 。打开之后发现版本很多很多,但是不能随意使用,需要根据自己的php与操作系统等等环境决定。
再打开这个页面:http://xdebug.org/wizard.php 里面全部是英文,但不要畏惧,还是比较易懂的。大概意思就是:把你的phpinfo信息粘贴到那个文本框中,然后点击下面的 “Analyse my phpinfo() output” 这个按钮,然后它就会根据你的开发环境信息建议你安装什么版本了。
注意:
a. 不能粘贴通过浏览器打印phpinfo()信息后,查看到的html源码。看到打印出的信息之后直接复制即可。
b. 点击“Analyse my phpinfo() output”按钮之后,在生成的建议信息中注意下面几项:
Xdebug installed: 2.0.5 
Windows: yes - Compiler: MS VC6 - Architecture: x86 
PHP Version: 5.2.5
如果 xdebug 项为 No , 说明还没有安装,如果后面接着是 Installed 说明已经安装过了,不需要再安装。
还有关键性的就是 windows 项与 php version 项。VC6, 要根据这个参数来找对应的版本。
然后再回到 download 页面寻找对应的扩展包。根据上面的信息我找到了一个 “PHP 5.2 VC6 TS (32 bit) (MD5: 2fda6a9d67eb1b4d09a6dc6b23f09ab0)”。有人说,如果php版本是5.2及以下的是需要带“_TS”的xdebug版本,本人没有测试过,也不知道这个“_TS”是什么意思。

2、把下载到的扩展包放到 php 的扩展库目录下,比如我的是 D:\wamp\php\ext\ 

3、找到php运行时加载的 php.ini 文件,然后在最低端添加如下的配置项:

;载入Xdebug,根据上一步的目录决定
zend_extension_ts="D:\wamp\php\ext\php_xdebug-2.0.5-5.2.dll"

;xdebug配置
[Xdebug]
;开启自动跟踪
xdebug.auto_trace = On
;开启异常跟踪
xdebug.show_exception_trace = On
;开启远程调试自动启动
xdebug.remote_autostart = On
;开启远程调试
xdebug.remote_enable = On
;收集变量
xdebug.collect_vars = On
;收集返回值
xdebug.collect_return = On
;收集参数
xdebug.collect_params = On

如果php版本是5.2及以下版本需要是 zend_extension_ts 这个配置选项,如果是 5.3 及以上版本需要是 zend_extension。依然不知道为什么?不过可以肯定5.2.5版本确实是如此,更低的版本与更高的版本没有测试过,“_ts” 是何物?

4、验证是否安装成功。(需要重新启动apache,或者是php-fpm
依然根据phpinfo() 输出信息查看。
接着根据运行一段代码验证,如果运行输出结果说明安装成功,如果出现异常说明安装失败。

<?php
$a = "new string";
$b = &$a;
$a = null;
xdebug_debug_zval( 'a' );
xdebug_debug_zval( 'b' );
?>


12
Feb 2012
AUTHOR WiFeng
CATEGORY Web,Asset
COMMENTS No Comments