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 に答える