/ / Php Regex - Como escolher se é igual a algo - php, regex, pdf

Php Regex - Como escolher se é igual a algo - php, regex, pdf

class Something

{

public static function compile(&$subject, $replace, $with) {

$placeholders = array_combine($replace, $with);



$condition  = "{[a-z0-9_- ]+:[a-z_]+}";

$inner      = "((?:(?!{/?if).)*?)";

$pattern    = "#{ifs?(".$condition.")}".$inner."{/if}#is";



while (preg_match($pattern, $subject, $match)) {

$placeholder = $match[1];

$content     = $match[2];



// if empty value remove whole line

// else show line but remove pseudo-code

$subject = preg_replace($pattern,

empty($placeholders[$placeholder]) ? "" : addcslashes($content, "$"),

$subject,

1);

}

}

}

Eu tenho uma área de código html para jogar. Dompdf lida com o resto para converter o meu formulário em pdf. Este código de classe foi quase pronto. Isso me dá liberdade para usar;

 {if {dil:value}} <div class="english">ENGLISH</div> {/if}

algo assim na área html. Mas foi apenas verificar se o botão de opção está vazio ou não. Mas quero saber qual opção está selecionada. Então eu quero usar um código como;

 {if {dil:value}=="ENGLISH"} <div class="english">ENGLISH</div> {/if}

Eu converti a linha de verificação vazia com verificação de igualdade manual para ver se funciona;

        // if empty value remove whole line

// else show line but remove pseudo-code

$subject = preg_replace($pattern,

$placeholders[$placeholder]=="english" ? "" : addcslashes($content, "$"),

$subject,

1);

E funcionou, mas sem liberdade deClaro (somente se rádio é igual a inglês). Eu sou tão novo no regex, então eu não conseguia descobrir. Eu tentei adicionar $ variável de igualdade, então eu usaria meu código muitas vezes com verificações diferentes;

class Something

{

public static function compile(&$subject, $replace, $with) {

$placeholders = array_combine($replace, $with);



$condition  = "{[a-z0-9_- ]+:[a-z_]+}";

$inner      = "((?:(?!{/?if).)*?)";

$equality   = "(?<=~)[^}]*(?=~)";

$pattern    = "#{ifs?(".$condition.")".$equality."}".$inner."{/if}#is";



while (preg_match($pattern, $subject, $match)) {

$placeholder = $match[1];

$content     = $match[2];



// if empty value remove whole line

// else show line but remove pseudo-code

$subject = preg_replace($pattern,

$placeholders[$placeholder]==$equality ? "" : addcslashes($content, "$"),

$subject,

1);

}

}

}

com este código na área html;

{if {dil:value}~"ENGLISH"~} <div class="english">ENGLISH</div> {/if}

Eu realmente acreditava que iria funcionar, mas não :) Mesmo padrão não foi apagado após a conversão para pdf para que eu possa ler o meu código no arquivo pdf.

Eu posso estar faltando algo sobre $ match também. Com a variável de igualdade incluída, $ match pode ter uma terceira matriz, eu acho. Então eu também tentei adicionar isso, mas isso não funcionou também;

   while (preg_match($pattern, $subject, $match)) {

$placeholder = $match[1];

$equality   =  $match[2];

$content    = $match[3];

Bem, meu objetivo é colocar os ícones de seleção em áreas específicas da caixa em uma imagem de formulário projetada previamente. Eu segurei todas as caixas de texto com posições absolutas, exceto obter qual botão de opção está marcado.

Obrigado por toda sua ajuda.

Respostas:

0 para resposta № 1

Eu resolvi assim;

class Something
{

public static function compile(&$subject, $replace, $with) {

$placeholders = array_combine($replace, $with);



$condition  = "{[a-z0-9_- ]+:[a-z_]+}";

$inner      = "((?:(?!{/?if).)*?)";

$equality   = "(~[A-ZÇŞĞÜÖİçşğüöı]+~)";

$pattern    = "#{ifs?(".$condition.")}".$equality."".$inner."{/if}#is";



while (preg_match($pattern, $subject, $match)) {

$placeholder = $match[1];

$equality    = $match[2];

$content     = $match[3];

$equality = substr($equality, 1, -1);

// if empty value remove whole line

// else show line but remove pseudo-code

$subject = preg_replace($pattern,

$placeholders[$placeholder] == $equality ? "" : addcslashes($content, "$"),

$subject,

1);

}

}

}

Eu mudei minha regex de igualdade para suportar caracteres Utf-8 e mudei outros regexes um pouco. Houve cortes sem exceções. E finalmente eu posso usá-lo em html assim;

{if {language:value}}~FRENCH~<div class="english">ENGLISH</div>{/if}

Então, primeiro jogo recebe o valor do botão de rádio, segundomatch é minha verificação de igualdade e terceira correspondência é o que será escrito se a igualdade estiver errada. Sim, eu sei que soa um pouco invertido modo :) Por isso, provavelmente, não vai funcionar com botões de rádio que têm mais de 2 opções. Mas nas minhas situações meus todos os botões de rádio têm duas opções.

Até aí tudo bem, eu meio que aprendi regex hoje :)