本文记录的是在 php 程序过程中的一些点滴
(原文链接 http://ddbiz.com/?p=175)
- php 多行匹配
适用版本 php 5.3.2
preg_match('/<prefix>(.*?)<//prefix>/is', $content)
根据文档,正则修正符的使用说明:
/i
不区分大小写
/s
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符
上面的例子就是用到此选项
/U
本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号(如 .*?)来启用此选项。
/m
默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)。这和 Perl 是一样的。
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“/n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。
- php pdo mysql 的参数设定
pdo_mysql 中,链接mysql 的 pdostatment 使用的参数形式为 :param, 如:
$sth = $dbh->prepare('select id from tuser where name=:name');
$sth->execute(array(':name' => $name));
如果使用 ?param 的话,execute 会报错,但是没有进一步的错误信息, 如 :
$sth = $dbh->prepare('select id from tuser where name=?name');
$sth->execute(array('?name' => $name)); //返回 false