<?php
$str = '{![工位号]}>=( {![分机]}!={![手机]} )or{![登录密码]} == {![部门主管]}';
$pattern = "/{!\[([^\]]*)\]}/";
if (preg_match_all($pattern,$str,$match))
{
print_r($match[1]);
}
?>

解决方案 »

  1.   

    $pattern = "/{!\[(.+)\]}/U";你好象是在做语法解析
    如果是,则应用preg_replace_callback对匹配到的成分做处理。仅获取名称是不够的
      

  2.   

    如果都是汉字的,可以用\UXXXX
      

  3.   

    <?
    $subject = "{![工位号]}>=( {![分机]}!={![手机]} )or{![登录密码]} == {![部门主管]}";
    preg_match_all('/{!\\[(.*?)\\]}/', $subject, $result, PREG_PATTERN_ORDER);
    for ($i = 0; $i < count($result[0]); $i++) {
    // $result[0][$i];
    echo $result[1][$i];
    }
    ?>