/ / Php Regex - Wie man wählt, wenn es gleich ist - PHP, Regex, PDF

PHP Regex - Wie zu wählen, wenn gleich etwas ist - 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);

}

}

}

Ich habe einen HTML-Code-Bereich zum Spielen. Dompdf erledigt den Rest, um mein Formular in pdf zu konvertieren. Dieser Klassencode war fast schon vorgefertigt. Es gibt mir die Freiheit zu benutzen;

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

so etwas im HTML-Bereich. Aber es hat nur überprüft, ob der Radioknopf leer ist oder nicht. Aber ich möchte lernen, welche Option ausgewählt ist. Also ich möchte einen Code wie verwenden;

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

Ich habe leere Check-Zeile mit manueller Gleichheitsprüfung umgewandelt, um zu sehen, ob es funktioniert;

        // if empty value remove whole line

// else show line but remove pseudo-code

$subject = preg_replace($pattern,

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

$subject,

1);

Und es hat funktioniert, aber ohne eine Freiheit vonNatürlich (nur wenn Radio gleich Englisch ist). Ich bin so neu im Regex, also konnte ich es nicht herausfinden. Ich habe versucht, $ Gleichheitsvariable hinzuzufügen, also würde ich meinen Code viele Male mit verschiedenen Überprüfungen verwenden;

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);

}

}

}

mit diesem Code im HTML-Bereich;

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

Ich glaubte wirklich, dass es funktionieren würde, aber es tat nicht :) Sogar Muster löschte nicht, nachdem es in pdf umgewandelt wurde, also kann ich meinen Code unter der pdf-Akte lesen.

Vielleicht fehlt mir auch etwas an $ match. Mit der Gleichheitsvariable eingeschlossen, also $ match könnte drittes Array erhalten, denke ich. Also habe ich auch versucht, dies hinzuzufügen, aber das hat nicht funktioniert;

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

$placeholder = $match[1];

$equality   =  $match[2];

$content    = $match[3];

Nun, mein Ziel ist es, Check-Icons auf bestimmte Box-Bereiche auf vorgefertigten Design-Bild zu setzen. Ich habe alle Textfelder mit absoluten Positionen gehandhabt, außer dass der Radio Button aktiviert wurde.

Danke für all deine Hilfe.

Antworten:

0 für die Antwort № 1

Ich habe es so gelöst;

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);

}

}

}

Ich änderte meine Gleichheitsregex, um Utf-8 Zeichen zu unterstützen, und änderte andere Regexen etwas. Es gab nicht excaped Schrägstriche. Und schließlich kann ich es bei html so verwenden;

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

Die erste Übereinstimmung erhält den Radio Button-Wert, zweiteÜbereinstimmung ist meine Gleichheitsüberprüfung, und dritte Übereinstimmung wird geschrieben, wenn Gleichheit falsch ist. Ja, ich weiß, es klingt ein wenig umgekehrten Modus :) So funktioniert es wahrscheinlich nicht mit Radio-Tasten, die mehr als 2 Optionen haben. Aber in meinen Situationen haben meine alle Radio-Tasten 2 Optionen.

So weit, so gut, ich habe heute Regex gelernt :)