有一个字符串,按照php变量名规则取出所有符合的变量名。比如:
$str = '$dfdfd.fg.$sf.$d.$_POST';要得到
$dfdfd
$sf
$d
$_POST最好是以数组返回
请问下面的代码有什么问题<?php
$str = '$dfdfd.fg.$sf.$d.$_POST';
$pattern = "@\$[_a-zA-Z]+[_a-zA-Z0-9]*@";
$arr = preg_split($pattern, $str);print_r($arr);
?>

解决方案 »

  1.   

    打出的结果是Array ( [0] => $dfdfd.fg.$sf.$d.$_POST ) 
      

  2.   

    $str = '$dfdfd.fg.$sf.$d.$_POST';
    $pattern = "@\\$[_a-zA-Z]+[_a-zA-Z0-9]*@";//转义\
    preg_match_all($pattern, $str,$arr);//用preg_split干嘛呀?这个是正则分割字符串。print_r($arr[0]);
      

  3.   


    $a=array();
    $str = '$dfdfd.fg.$sf.$d.$_POST';
    $newstr= explode(".",$str);
    foreach ($newstr as $val){
    if(substr($val,0,1)=='$'){
    array_push($a,$val);}
    }
    print_r($a);
      

  4.   

    $result=explode(".",$str);
    print_r($result);
    这个不行吗
      

  5.   

    lz的正则式还嫌不足,变量名还支持中文,用手册的吧
    ================================================
    变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'。