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个选项.
到目前为止这么好,我今天有点学习正则表达式:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。