正则表达式模式以获取标签之间的文本

时间:2014-08-16 18:08:53

标签: php regex

我的字符串是:

$p['message'] = '[name]Fozia Faizan[/name]\n[cell]03334567897[/cell]\n[city]Karachi, Pakistan[/city]';

我想要做的是使用REGEX模式以获得如下结果:

    Name: Fozia Faizan
    Cell #: 03334567897
    City: Karachi, Pakistan

我试过这个正则表达式:

    $regex = "/\\[(.*?)\\](.*?)\\[\\/\\1\\]/";
    $message = preg_match_all($regex, $p['message'], $matches);

但它根本不起作用。请帮忙

2 个答案:

答案 0 :(得分:1)

您的正则表达式已经有效,只需将结果合并到$matches

$p['message'] = '[name]Fozia Faizan[/name]\n[cell]03334567897[/cell]\n[city]Karachi, Pakistan[/city]';
$regex = "/\\[(.*?)\\](.*?)\\[\\/\\1\\]/";
preg_match_all('~\[(.*?)](.*?)\[/\1]~', $p['message'], $matches);
$result = array_combine ($matches[1], $matches[2]);
print_r($result);

会给你:

Array
(
    [name] => Fozia Faizan
    [cell] => 03334567897
    [city] => Karachi, Pakistan
)

答案 1 :(得分:1)

好吧,使用@ jh314的精彩回复,你可以写:

$p['message'] = '[name]Fozia Faizan[/name]\n[cell]03334567897[/cell]\n[city]Karachi, Pakistan[/city]';
$m = array();
preg_match_all('|\[(.*?)](.*?)\[/\1]|', $p['message'], $m);
$result = @array_combine($m[1], $m[2]);
$out = "Name: {$result['name']}\nCell #: {$result['cell']}\nCity: {$result['city']}";
echo $out;
//$outHTML = nl2br("Name: {$result['name']}\nCell #: {$result['cell']}\nCity: {$result['city']}");
//echo $outHTML;

那会给你:

Name: Fozia Faizan
Cell #: 03334567897
City: Karachi, Pakistan

编辑:您也可以在函数名称之前添加@,如下所示:@array_combine,以便在页面顶部显示错误,只有这样做才会工作,你得到预期的结果。