Php 识别组标记

Php 识别组标记,php,algorithm,tags,Php,Algorithm,Tags,我不知道如何解决这个问题-我有一个球员名单,例如 玩家 可可 博奥队 某人 达巴迪队 歌利亚队 斯特拉德[infi] 显然,Coco和stradder有一个团队标签[infi]和booo,goliat和Dabadee有一个名为的团队标签 我想列出不同的标签,但是标签可以是#tag[tag]或任何人(游戏)的氏族标签(我从服务器获取游戏数据) 我不知道该怎么做,我能做的最好的事情是: 分解“ 将分解中所有可能的项添加到数组中 使其仅显示唯一的项目 计算每个字符串在原始玩家列表中找到的次数

我不知道如何解决这个问题-我有一个球员名单,例如

  • 玩家
  • 可可
  • 博奥队
  • 某人
  • 达巴迪队
  • 歌利亚队
  • 斯特拉德[infi]
显然,
Coco
stradder
有一个团队标签
[infi]
booo
goliat
Dabadee
有一个名为
的团队标签

我想列出不同的标签,但是标签可以是
#tag
[tag]
或任何人(游戏)的氏族标签(我从服务器获取游戏数据)

我不知道该怎么做,我能做的最好的事情是:

  • 分解
  • 将分解中所有可能的项添加到数组中
  • 使其仅显示唯一的项目
  • 计算每个字符串在原始玩家列表中找到的次数
但是,如果我爆炸一个空格,
[tag]name
将被跳过


有更好的主意吗?

这看起来像是正则表达式的工作。您可以拥有一定数量的regexp,然后尝试一个接一个地匹配它们:

/**
 * function to return a tag given a playerName
 * @param  $playerName      string: player name, e.g. Coco [teamTag]
 * @return array            matching syntax (here 'brackets') and tag value (teamTag)
 */
function getTag($playerName) {

    // Allowed syntaxes

    $tagSyntaxes = array(
        'hash'    => '/#([\\w\\d]+)$/',
        'html'    => '/<tag>(.*?)<\/tag>/',
        'bracket' => '/[[](.*?)[]]/',
    );

    // One loop to rule them all
    foreach ($tagSyntaxes as $syntaxName => $regexp) {
        if (preg_match($regexp, $playerName, $gregs)) {
            // First syntax to match wins.
            return array(
                'syntax' => $syntaxName,
                'tag'    => $gregs[1])
            )
        }
    }
    // Loop exited with no match. Return a "dummy" tag
    return array('syntax' => 'none', 'tag' => null);
}
/**
*函数返回给定playerName的标记
*@param$playerName字符串:玩家名称,例如Coco[teamTag]
*@返回数组匹配语法(此处为“括号”)和标记值(teamTag)
*/
函数getTag($playerName){
//容许语法
$tagSyntaxes=array(
'哈希'=>'/#([\\w\\d]+)$/',
“html'=>'/(.*?/”,
'括号'=>'/[[](.*?[]]/',
);
//一个循环来统治他们所有人
foreach($tagSyntaxes as$syntaxName=>$regexp){
if(预匹配($regexp、$playerName、$gregs)){
//第一个匹配wins的语法。
返回数组(
'syntax'=>$syntaxName,
'tag'=>$gregs[1])
)
}
}
//循环已退出,但不匹配。返回“虚拟”标记
返回数组('syntax'=>'none','tag'=>null);
}

您是否遗漏了
'/(.*?)
字符串末尾的
/