Php Regex – 如果等于某事,如何选择

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,'$'),1);

        }

    }

}

我有一个HTML代码区域可以播放. Dompdf处理其余部分以将表单转换为pdf.这个类代码几乎是预制的.它让我自由使用;

{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,1);

它有效但当然没有自由(只有当无线电等于英语时).我是正则表达式的新手,所以我无法理解.我试图添加$equality变量,所以我会使用不同的检查多次使用我的代码;

class Something

{

    public static function compile(&$subject,$with);



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

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

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

        $pattern    = '#{if\s?('.$condition.')'.$equality.'}'.$inner.'{/if}#is';



        while (preg_match($pattern,$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,1);

        }

    }

}

在html区域使用此代码;

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

我真的相信它会工作,但它没有:)甚至模式在转换为pdf后没有被删除所以我可以在pdf文件下阅读我的代码.

我可能也错过了一些关于$match的事情.包含相等变量,所以$match可能会获得第三个数组.所以我也尝试添加它,但这也不起作用;

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

        $placeholder = $match[1];  

        $equality   =  $match[2];     

        $content    = $match[3];

我的目标是将检查图标放在预制设计的表单图像上的特定框区域.我处理了所有具有绝对位置的文本框,除了选中哪个单选按钮.

谢谢你的帮助.

解决方法

解决了这个问题;

class Something
{

    public static function compile(&$subject,$with);



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

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

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

        $pattern    = '#{if\s?('.$condition.')}'.$equality.''.$inner.'{\/if}#is';



        while (preg_match($pattern,$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,1);

        }

    }

}

我改变了我的相等正则表达式以支持Utf-8字符并且稍微更改了其他正则表达式.有非脱离的斜线.最后我可以在这样的html中使用它;

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

因此,第一个匹配获取单选按钮值,第二个匹配是我的相等检查,第三个匹配是如果相等错误将写入的内容.是的,我知道这听起来有点颠倒模式:)所以它可能不适用于有2个以上选项的单选按钮.但在我的情况下,我的所有单选按钮都有2个选项.

到目前为止这么好,我今天有点学习正则表达式:)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...