Php正则表达式-如何选择是否等于某个值

Php正则表达式-如何选择是否等于某个值,php,regex,pdf,Php,Regex,Pdf,我有一个html代码区可以玩。Dompdf处理将我的表单转换为pdf的其余部分。这个类代码几乎是预先编写好的。它给了我使用的自由 class Something { public static function compile(&$subject, $replace, $with) { $placeholders = array_combine($replace, $with); $condition = '{[a-z0-9\_\-

我有一个html代码区可以玩。Dompdf处理将我的表单转换为pdf的其余部分。这个类代码几乎是预先编写好的。它给了我使用的自由

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

        }

    }

}
当然,这是可行的,但没有自由(只有当收音机等同于英语时)。我对regex很陌生,所以我想不出来。我尝试添加$equality变量,以便在不同的检查中多次使用代码

        // if empty value remove whole line

        // else show line but remove pseudo-code

        $subject = preg_replace($pattern,

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

                                $subject,

                                1);
我的目标是在预先设计好的表单图像上的特定框区域放置复选图标。我处理了所有带有绝对位置的文本框,除了选中哪个单选按钮

谢谢你的帮助。

我就是这样解决的

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

        $placeholder = $match[1];  

        $equality   =  $match[2];     

        $content    = $match[3];
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    = '#{if\s?('.$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);

        }

    }

}
我更改了我的相等正则表达式以支持Utf-8字符,并稍微更改了其他正则表达式。有未被清除的斜线。最后,我可以像这样在html中使用它

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

        $placeholder = $match[1];  

        $equality   =  $match[2];     

        $content    = $match[3];
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    = '#{if\s?('.$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);

        }

    }

}
{if{language:value}}~法语~英语{/if}
所以第一个匹配得到单选按钮值,第二个匹配是我的相等性检查,第三个匹配是相等性错误时将写入的内容。是的,我知道这听起来有点反模式:),所以它可能不会与有两个以上选项的单选按钮一起工作。但在我的情况下,我的所有单选按钮都有两个选项

到目前为止还不错,我今天学了一些正则表达式:)

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

        $placeholder = $match[1];  

        $equality   =  $match[2];     

        $content    = $match[3];
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    = '#{if\s?('.$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);

        }

    }

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