<?php/**
*
*
* @version $Id$
* @copyright 2009
*/
$input = <<<END
name = 'Tim O\'Reilly';
END;$pattern = <<< END
'
(.*?
(?<! \\\\))'
END;preg_match ("($pattern)x",$input,$match);echo $match[1];?>这是一个例子,小弟无法理解工作原理!大侠,救命!谢谢!
*
*
* @version $Id$
* @copyright 2009
*/
$input = <<<END
name = 'Tim O\'Reilly';
END;$pattern = <<< END
'
(.*?
(?<! \\\\))'
END;preg_match ("($pattern)x",$input,$match);echo $match[1];?>这是一个例子,小弟无法理解工作原理!大侠,救命!谢谢!
preg_match("/'(.*?(?<![\\\\]))'/",$input,$match);
echo $match[1];
首先这个正则要匹配的就是$input字符串,单引号之间的内容,也就是Tim O\'Reilly.
你会下意识的写上正则/'(.*?)'/,仔细一看字符串,不对,里面还有个单引号,就在转义字符\后面那个.
于是/'(.*?)'/ 只匹配到了"Tim O\"这几个字符,但是我就是想要Tim O\'Reilly,怎么办呢,聪明的你一定
想到了,我只要判断单引号前面是否跟着个转义字符\就成了,如果前面是\,就继续匹配,如果不是就匹配结束.
于是乎就是有了这个东西/(?<![\\\\])'/,匹配前面没有跟着\的那个单引号.
/'.*?(?<![\\\\])'/的意思就是从第一个引号开始匹配,到前面不跟\号的的那个单引号结束.
于是就可以匹配到Tim O\'Reilly了.