简单的preg_match正则表达式需要

时间:2012-07-04 19:52:57

标签: preg-match php-5.3 strtr

我正在尝试匹配包含@[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:没有鞋子的一天]   (ODWS)活动? ODWS是一项年度计划,由8416861761:274:TOMS   提高对一双鞋可以产生的影响的认识   孩子的生活。

2 个答案:

答案 0 :(得分:1)

<?php

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

echo $matches[1];  

答案 1 :(得分: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);
}

See it on codepad