0

我正在尝试匹配我的字符串中包含的标签,我@[anyNumbers:anyNumbers:anyLetters] 希望删除中间的@[]所有内容作为我以后可以过滤的字符串。
完成此任务的最简单方法是什么?

$str = 'Have you heard of the @[159208207468539:274:One Day without Shoes] (ODWS) campaign?  ODWS is an annual initiative by @[8416861761:274:TOMS] to bring awareness around the impact a pair of shoes can have on a child's life.';
    function gettag($text){
    //
            //$regex = "\@[([a-z0-9-:]*)\]";
            //$match = preg_match("/^$regex$/", $text);
                    //return $match;
                    return preg_replace('/@\[(\d+:\d+:[a-zA-Z]+)\]/', '${1}', $text);

    }
    gettag($str);

返回

你听说过@[159208207468539:274:One Day without Shoes] (ODWS) 活动吗?ODWS 是一项由 8416861761:274:TOMS 发起的年度倡议,旨在让人们了解一双鞋可能对孩子的生活产生的影响。

4

2 回答 2

1
<?php

$string = "@[123:456:abcZ]";
preg_match('/^@\[(([0-9]+:){2}[a-zA-Z]+)\]$/', $string, $matches);

echo $matches[1];  
于 2012-07-04T20:03:02.270 回答
0

使用稍微修改过的模式版本,您可以这样做:

function gettag($text) {
    return preg_replace('/@\[([ a-z0-9-:]*)\]/i', '${1}', $text);
}

如果您希望它更具体,我们可以将模式修改为更严格:

function gettag($text) {
    return preg_replace('/@\[(\d+:\d+:[a-zA-Z ]+)\]/', '${1}', $text);
}

在键盘上查看

于 2012-07-04T20:01:42.777 回答