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> ?>