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 = '#{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,'$'),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 = '#{ifs?('.$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 = '#{ifs?('.$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个选项. 到目前为止这么好,我今天有点学习正则表达式:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |