字符串有:
  
    TEST_DB_DATABASE
    TEST_DB_DATABASE_USER
    TEST_DB_DATABASE_PSD
    TEST_DB_DATABASE_HOST
    求正则将TEST_DB_DATABASE 提取出来,目前我写的是:'/TEST_DB_\w*(?=_)/';
匹配了除TEST_DB_DATABASE以外的所有,如何只匹配TEST_DB_DATABASE呢?

解决方案 »

  1.   

    preg_match('/TEST_DB_DATABASE/m',$str,$arr);
    echo $arr[0]
      

  2.   


    误解我的意思了,字符串里还有其它例如:    TEST_DB_INFO
        TEST_DB_INFO_USER
        TEST_DB_INFO_PSD
        TEST_DB_INFO_HOST
    要把TEST_DB_DATABASE 和 TEST_DB_INFO 都提取出来
      

  3.   

    注意 \w 是包含 _ 的
    /TEST_DB_[A-Z]*/
      

  4.   


    preg_match_all('/TEST_DB_[^_]+\b/mU',$str,$arr);
    print_r( $arr[0]);Array
    (
        [0] => TEST_DB_DATABASE
        [1] => TEST_DB_INFO
    )
      

  5.   

    那就是你的描述不清楚了
    应该说:TEST_DB_后面跟不含有 _ 的字母。。
    如楼上的据说,\w是包含 _ 的。[a-zA-Z]+就行了。
      

  6.   

    四楼的可以,这样改一下或许符合楼主的问题。$str = <<<string
    TEST_DB_DATABASE
    TEST_DB_DATABASE_USER
    TEST_DB_DATABASE_PSD
    TEST_DB_DATABASE_HOST
    TEST_DB_INFO
    TEST_DB_INFO_USER
    TEST_DB_INFO_PSD
    TEST_DB_INFO_HOST...string;
    $pattern = '/TEST_DB_[A-Z]++(?!_)/';
    preg_match_all($pattern, $str, $matches);
    print_r($matches[0]);