Php正则表达式-如何选择是否等于某个值
我有一个html代码区可以玩。Dompdf处理将我的表单转换为pdf的其余部分。这个类代码几乎是预先编写好的。它给了我使用的自由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\_\-
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}