class Something
{
public static function compile(&$subject, $replace, $with) {
$placeholders = array_combine($replace, $with);
$condition = '{[a-z0-9\_\- ]+:[a-z_]+}';
$inner = '((?:(?!{/?if).)*?)';
$pattern = '#{if\s?('.$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);
}
}
}
私は、再生するHTMLコードエリアを持っています。私のフォームをpdfに変換するために、Dompdfが残りを処理します。このクラスコードはほぼ完成していました。それは私に自由を与える。PHP正規表現 - 等しいかどうかを判断する方法
{if {dil:value}} <div class="english">ENGLISH</div> {/if}
html領域のようなものです。しかしラジオボタンが空であるかどうかだけをチェックしていました。しかし、どのオプションが選択されているかを知りたい。だから私は次のようなコードを使用したい。
{if {dil:value}=='ENGLISH'} <div class="english">ENGLISH</div> {/if}
空のチェックラインを手動の等価チェックで変換して動作するかどうかを確認しました。
// if empty value remove whole line
// else show line but remove pseudo-code
$subject = preg_replace($pattern,
$placeholders[$placeholder]=='english' ? '' : addcslashes($content, '$'),
$subject,
1);
これは機能しましたが、もちろん自由です(ラジオが英語に等しい場合のみ)。私は正規表現にはとても新しいので、私はそれを理解することができませんでした。私は$等価変数を追加しようとしましたので、私は自分のコードをさまざまな検査で何度も使用します。
class Something
{
public static function compile(&$subject, $replace, $with) {
$placeholders = array_combine($replace, $with);
$condition = '{[a-z0-9\_\- ]+:[a-z_]+}';
$inner = '((?:(?!{/?if).)*?)';
$equality = '(?<=~)[^}]*(?=~)';
$pattern = '#{if\s?('.$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);
}
}
}
このコードはhtml領域にあります。
{if {dil:value}~'ENGLISH'~} <div class="english">ENGLISH</div> {/if}
私は実際にそれがうまくいくと信じていますが、私はpdfファイルの下で私のコードを読むことができるので、それもパターン:)をしていないPDFに変換した後に消去されませんでした。
$ matchについても何か不足している可能性があります。等価変数が含まれているので、$ matchは3番目の配列を取得する可能性があります。だから、私もこれを追加しようとしましたが、うまくいきませんでした。
while (preg_match($pattern, $subject, $match)) {
$placeholder = $match[1];
$equality = $match[2];
$content = $match[3];
私の目標は、デザイン済みのフォームイメージ上の特定のボックス領域にチェックアイコンを配置することです。私はどのラジオボタンがチェックされているかを除いて絶対位置ですべてのテキストボックスを扱った。
ありがとうございました。