preg_match("#<a src=(['\"])?(?!\[\$ddd\])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar); 其中的[$ddd]有问题,目的是为了匹配除[$ddd]之外的图 能帮忙解释\[\$ddd\]为什么不行吗?从语法上看,是没有问题的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [^\$|\$(?!ddd)]这个不正确,它会把任何[.*]的都拒绝。如[111]是我要的结果,只是不需要[$ddd]的结果。 我检查过,这个表达式,主要$出的问题,如果没有$是正确的。也就是说\[\$ddd\],其中的$该怎么匹配? preg_match("#<a src=(['\"]?)(?!\[\\\$ddd\])(.+?)(\\1|\s).+?>#is",$s,$ar); 在双引号内要用\\\$。 这个我明白了。字符串里的\$ == \\ . \$其实相当两部分。那么字符串中如果有有' ",正则进行匹配的话,是不是也要这样呢?但这个:print preg_match("#\[\$\w+\]#is", "[\$ddd]");又不需要\\\$,是为什么? preg_match("#\[\$\w+\]#is", "[\$ddd]");这句后面跟的是字母啊,怎么不用二次转义呢? 在双引号中,php会吧$与其后的变量字符当作变量做取值处理所以"$ddd" 得到的是$ddd的值而"$\w+" 得到的依然是 $\w+,因为“\”不是变量字符在正则表达式中,字符“$”表示行结束,如果需要匹配字符“$”需写做“\$”注意:php首先将规则串当作普通的字符串处理,然后将结果传递给正则表达式函数为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起 还是有些疑惑:$s = '<a src="[$ddd].gif">';preg_match("#<a src=(['\"])?(?![\[{]\$\w+[\]}])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar);print_r( $ar );按:"$\w+" 得到的依然是 $\w+,因为“\”不是变量字符在正则表达式中,字符“$”表示行结束,如果需要匹配字符“$”需写做“\$”\$\w+ 这就应该表示 $ddd 的字符了。但:以上结果还是不对的。还是需要\\\$\w+ 才对。 不是和你说了吗,“为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起”preg_match('#<a src=([\'"])?(?![\[{]\$\w+[\]}])([^\'"<>]+\.gif)(\\1)>#is',$s,$ar); preg_match("#\[\$\w+\]#is", "[\$ddd]");$后面跟的是\w,\怎么是字母了…… 我越来越迷糊。一、>>“为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起”preg_match('#<a src=([\'"])?(?![\[{]\$\w+[\]}])([^\'"<>]+\.gif)(\\1)>#is',$s,$ar);这个我是试过的,使用'是正确的。那么在这里,不管是'还是",\$\w可以表示$ddd,这点是不是正确的,因为\不是变量字符。如果这点成立,那么这个表达式从理论上将是成立的。preg_match("#<a src=(['\"])?(?![\[{]\$\w+[\]}])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar);二、>>preg_match("#\[\$\w+\]#is", "[\$ddd]");$后面跟的是\w,\怎么是字母了……这个意思,我明白了,谢谢。 PHP 批量utf8文件转gb2312文件 虚拟主机服务器不支持 pear 怎么办啊 linux下让apache支持PHP配置问题 小菜鸟求助一个简单问题 网站的商品分类很多 难道模板也要搞很多? windows2003服务器之mysql配置求助 php//gd库问题 这么复杂的表单是保存在数据库中么? PHP变量问题 请教高手:登陆不同的网站,但是这些网站使用session注册相同的变量,因此在不同网站间跳转会出现session的混乱! php fopen问题,好奇怪啊 用正则表达式获得绑定变量名
字符串里的\$ == \\ . \$
其实相当两部分。那么字符串中如果有有' ",正则进行匹配的话,是不是也要这样呢?但这个:print preg_match("#\[\$\w+\]#is", "[\$ddd]");
又不需要\\\$,是为什么?
所以
"$ddd" 得到的是$ddd的值
而
"$\w+" 得到的依然是 $\w+,因为“\”不是变量字符在正则表达式中,字符“$”表示行结束,如果需要匹配字符“$”需写做“\$”注意:php首先将规则串当作普通的字符串处理,然后将结果传递给正则表达式函数为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起
$s = '<a src="[$ddd].gif">';
preg_match("#<a src=(['\"])?(?![\[{]\$\w+[\]}])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar);
print_r( $ar );按:
"$\w+" 得到的依然是 $\w+,因为“\”不是变量字符在正则表达式中,字符“$”表示行结束,如果需要匹配字符“$”需写做“\$”\$\w+ 这就应该表示 $ddd 的字符了。但:
以上结果还是不对的。还是需要\\\$\w+ 才对。
preg_match('#<a src=([\'"])?(?![\[{]\$\w+[\]}])([^\'"<>]+\.gif)(\\1)>#is',$s,$ar);
$后面跟的是\w,\怎么是字母了……
一、
>>“为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起”
preg_match('#<a src=([\'"])?(?![\[{]\$\w+[\]}])([^\'"<>]+\.gif)(\\1)>#is',$s,$ar);
这个我是试过的,使用'是正确的。
那么在这里,不管是'还是",\$\w可以表示$ddd,这点是不是正确的,因为\不是变量字符。
如果这点成立,那么这个表达式从理论上将是成立的。
preg_match("#<a src=(['\"])?(?![\[{]\$\w+[\]}])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar);二、
>>preg_match("#\[\$\w+\]#is", "[\$ddd]");
$后面跟的是\w,\怎么是字母了……这个意思,我明白了,谢谢。