正则表达式提取和解析字符串

时间:2015-08-01 03:42:50

标签: php regex

我必须创建一个脚本来解析路径并用现有的数组属性替换变量。我有一个如下所示的多维数组:

$param = array(
        'titles'=>array(
            '[group1]'=>array(
                array('name'=>'picture','title'=>'personel_image','target_folder'=>'tmp/contacts/{name=picture}[value]'),
                array('name'=>'full_name','title'=>'Full Name'),
                array('name'=>'melli_code','title'=>'id code','format'=>'number'),
                )
        )
)

正如您所看到的,有一个属性调用target_folder,用户可以按以下格式编写,' tmp / contacts / {format = number} [title] / {name = picture} [title] '

我需要一个解决方案来解析上面路径的粗体部分,如下面的数组。

$search_for = array(
        '0'=>array(
            '[array_column]'=>'format',
            '[array_column_keyword']=>'number',
            '[array_column_value']=>'title',
        ),
        '1'=>array(
            '[array_column]'=>'name',
            '[array_column_keyword']=>'picture',
            '[array_column_value']=>'title',
        )
)

解决上述问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

由于格式是固定的,格式中只允许[A-Za-z0-9_],因此您可以将正则表达式编写为:

preg_match('~\{[A-Za-z0-9_]+=[A-Za-z0-9_]+\}\[[A-Za-z0-9_]+\]~', $str, $matches);

在非UTF模式下(没有u标记),您可以安全地将[A-Za-z0-9_]替换为\w

preg_match('~\{\w+=\w+\}\[\w+\]~', $str, $matches);