PHP Preg_replace и Call of Duty Color Issue

Call of Duty и Quake Games используют коды от ^ 0 до ^ 1 для определения цвета в именах (строках). Я работаю над пользовательским сценарием Web RCON и имеет проблемы с заменой ^ 0 ~ ^ 9 на HTML-цвета для вывода

Im Попытка заменить, например, на PHP

строка генерируется и выглядит аналогично Lets Say, например.

^ 3The ^ 7 :: ^ 5MODERNWARFARE ^ 7 :: ^ 3Server

Im использует 2 массива для этого

$find = array( '/\^0(.*?)\^/', '/\^1(.*?)\^/', '/\^2(.*?)\^/', '/\^3(.*?)\^/', '/\^4(.*?)\^/', '/\^5(.*?)\^/', '/\^6(.*?)\^/', '/\^7(.*?)\^/', '/\^8(.*?)\^/', '/\^9(.*?)\^/', ); $replace = array( '<font color="#000000">$1</font>^', '<font color="#F65A5A">$1</font>^', '<font color="#00F100">$1</font>^', '<font color="#EFEE04">$1</font>^', '<font color="#0F04E8">$1</font>^', '<font color="#04E8E7">$1</font>^', '<font color="#F75AF6">$1</font>^', '<font color="#FFFFFF">$1</font>^', '<font color="#7E7E7E">$1</font>^', '<font color="#6E3C3C">$1</font>^', ); // Just a Random Test String $aDemoString = "^3THE^7::^5MODERNWARFARE^7::^3Server^7"; $namefix = preg_replace($find, $replace, $aDemoString); echo $namefix; 

Выход только частично работает, и я получаю

 <font color="#00F100">THE</font><font color="#FFFFFF">::<font color="#04E8E7">MODERNWARFARE</font></font>^7::<font color="#00F100">Server</font>^7 

и он прерывает закрывающий </font>

если я удалю ^ 7 до конца строки, которую я получаю

 <font color="#00F100">THE</font><font color="#FFFFFF">::<font color="#04E8E7">MODERNWARFARE</font></font>^7::^2Server 

Кажется, он не заменит ^ 7 в строке правильно и по какой-то причине испортил тег конца html </font> также, если я удалю последний ^ 7, тогда он сломает последнюю замену «^ 2»

Мой вопрос: как мне получить PHP Preg_replace, чтобы сделать это правильно, любую справку?

Попробуй это:

 $colors = array( "#000000", "#F65A5A", "#00F100", "#EFEE04", "#0F04E8", "#04E8E7", "#F75AF6", "#FFFFFF", "#7E7E7E", "#6E3C3C", ); $find = array( '/\^(\d)([^\^]*)/e', ); $replace = array( '"<font color=\"".$colors["$1"]."\">$2</font>"', ); // Just a Random Test String $aDemoString = "^3THE^7::^5MODERN^2WARFARE^7::^3Server^7"; $namefix = preg_replace($find, $replace, $aDemoString); echo $namefix."\n"; 

Патер является ^ 0STRING ^, поэтому вы должны удалить номер в конце, чтобы выполнить все части работы (и иметь один и тот же патерн).

Поэтому сначала вы должны сделать это:

 $aDemoString = "^3THE^7::^5MODERNWARFARE^7::^3Server^"; 

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

 $find = array( '/\^0([^\^]+)\^/', '/\^1([^\^]+)\^/', '/\^2([^\^]+)\^/', '/\^3([^\^]+)\^/', '/\^4([^\^]+)\^/', '/\^5([^\^]+)\^/', '/\^6([^\^]+)\^/', '/\^7([^\^]+)\^/', '/\^8([^\^]+)\^/', '/\^9([^\^]+)\^/' ); 

вместо ^ вы можете заменить это

 $find = array('/\^3(.*?).\d+/',.........); $replace = array( '<font color="#000000">$1</font>',........); 
 <?php $find = array( '/\^0([^^\d]*)/', '/\^1([^^\d]*)/', '/\^2([^^\d]*)/', '/\^3([^^\d]*)/', '/\^4([^^\d]*)/', '/\^5([^^\d]*)/', '/\^6([^^\d]*)/', '/\^7([^^\d]*)/', '/\^8([^^\d]*)/', '/\^9([^^\d]*)/', ); $replace = array( '<font color="#000000">', '<font color="#F65A5A">', '<font color="#00F100">', '<font color="#EFEE04">', '<font color="#0F04E8">', '<font color="#04E8E7">', '<font color="#F75AF6">', '<font color="#FFFFFF">', '<font color="#7E7E7E">', '<font color="#6E3C3C">', ); // Just a Random Test String $aDemoString = "^3THE^7::^5MODERNWARFARE^7::^3Server^7"; preg_match_all('/\^(\d)([^^\d]*)/', $aDemoString, $out); print_r($out); foreach($out[0] as $key => $val){ $aDemoString = str_replace($val, $replace[$out[1][$key]].$out[2][$key].'</font>', $aDemoString); } echo ($aDemoString); //<font color="#EFEE04">THE</font><font color="#FFFFFF">::</font><font color="#04E8E7">MODERNWARFARE</font><font color="#FFFFFF">::</font><font color="#EFEE04">Server</font><font color="#FFFFFF"></font> ?>