我正在尝试匹配包含@[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 提高对一双鞋可以产生的影响的认识 孩子的生活。
答案 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);
}