2014-01-23 2 views
1

Я не уверен, как подойти к этой проблеме. У меня есть список с игроками, например.Признание групповых тегов

  • игрока
  • Coco [INFI]
  • Booo #team
  • кто
  • Dabadee #team
  • Голиаф #team
  • stratder [INFI]

Очевидно, что Coco и stratder имеют команды тег [infi] и booo, goliat и Dabadee имеют тег с именем #team.

Я хочу перечислить различные теги, однако тег может быть <tag>#tag[tag] или что-то люди (игра) теги клановых (я выборка данных воспроизведения с сервера).

Я не знаю, как это сделать точно, лучшие вещи, которые я мог бы вещь была:

  • взрываются " "
  • добавить все возможные элемент из взрываются в массив
  • сделать так, массив показывает только уникальные элементы
  • подсчет каждая строка, сколько раз встречается в исходном списке игроков

Тем не менее, [tag]name будет пропущен, если я взорвусь на пробел.

Любые лучшие идеи?

ответ

2

Это похоже на работу для регулярных выражений. Вы можете иметь определенное количество регулярных выражений, и попытаться соответствующие им один за другим:

/** 
* 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); 
} 
+1

пропустили Вы '/' в конце '«/ <\/tag> (*.?)» 'Строки? – brandizzi

+0

Да! Спасибо, исправлено. – LSerni

Смежные вопросы