Home >Backend Development >PHP Tutorial >被正则玩疯了,为什么$matches[0]为空?
写个正则,能正常匹配到,但我还需要他返回匹配的整条字符串
正则如下
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);
<!-- Layout name="header" --><!-- Layout name="footer" -->
Array( [0] => [1] => header)
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->$/', $_content, $matches);
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
Array( [0] => <!-- Layout name="header" --> [1] => header)没有问题
$_content='<!-- Layout name="header" --><!-- Layout name="footer" -->';preg_match_all('//', $_content, $matches);print_r($matches);/*Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => header [1] => footer ))*/
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
Array( [0] => <!-- Layout name="header" --> [1] => header)没有问题
$_content='<!-- Layout name="header" --><!-- Layout name="footer" -->';preg_match_all('//', $_content, $matches);print_r($matches);/*Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => header [1] => footer ))*/
还有一个问题希望能解决一下
存在一字符串
$string = 'bbs/csdn/net/xxx';
$string = 'www/csdn/net/xxx';
preg_match( '#((?!bbs/).)*#', 'www/csdn/net/xxx/', $matches);
^是匹配输入字符串的开始位置,若待匹配的字符串不是以^之后的内容开始,根本就不会执行匹配
若是只是判断 字符串不是以bbs开头,这样比较快
$str='/bbs/www/csdn/net/xxx/';if(strpos($str,'bbs')!=0 || strpos($str,'bbs')===false){ //等于0就是以bbs开头,未找到返回false(全等于false) echo 'exe';}
^是匹配输入字符串的开始位置,若待匹配的字符串不是以^之后的内容开始,根本就不会执行匹配
若是只是判断 字符串不是以bbs开头,这样比较快
$str='/bbs/www/csdn/net/xxx/';if(strpos($str,'bbs')!=0 || strpos($str,'bbs')===false){ //等于0就是以bbs开头,未找到返回false(全等于false) echo 'exe';}
$str='www/bbs/net/xxx/';if(preg_match('/^bbs.+?/', $str)){ echo '以bbs开头';}else{ echo 'exe';}