使用正则表达式动态替换部分条件挡路 [英] Dynamically replace part of a condition block with regex

查看:17
本文介绍了使用正则表达式动态替换部分条件挡路的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

存在格式为:

的字符串
else if($rule=='somerule1')
echo '{"s":1,"n":"name surname"}';
else if($rule=='somerule2')
echo '{"s":1,"n":"another text here"}';
...

"s"只能包含数字,"n"任意文本。

在输入中,我有$rule值,我需要删除与该值对应的else if挡路。我正在尝试:

$str = preg_replace("/else if($rule=='$rule')
echo '{"s":[0-9],"n":".*"/", "", $str); 
其中$str是包含我上面提到的块的字符串,$rule是具有我需要删除的规则的字符串。但该函数返回$str,未做任何更改。

我做错了什么?


例如,将"s"值更改为1的脚本效果很好:

$str = preg_replace("/$rule')
echo '{"s":[0-9]/", $rule."')
echo '{"s":1", $str);

所以,我可能用=符号,或者可能用空格,或者.*出错。

推荐答案

正则表达式模式可以不那么严格、简单且更易于读取/维护。

您需要将第一行(条件表达式)与唯一的动态组件$rule变量逐字匹配,然后匹配紧随其后的整行。

编码:(Demo)

$contents = <<<'TEXT'
else if($rule=='somerule1')
echo '{"s":1,"n":"name surname"}';
else if($rule=='somerule2')
echo '{"s":1,"n":"another text here"}';
TEXT;

$rule = "somerule1";

echo preg_replace("~Qelse if($rule=='$rule')ER.+~", "", $contents);

输出:

else if($rule=='somerule2')
echo '{"s":1,"n":"another text here"}';

那么,我做了什么?这是official pattern demo

  1. Q.E表示按字面意思对待这两个元字符之间的所有内容(&Q)
  2. 则需要转义的唯一字符是第一个$,这并不是要阻止它被解释为字符串结尾的元字符,而是要将其解释为$rule变量的开始,因为模式用双引号括起来。
  3. 模式中的第二个$rule确实需要解释为变量,这样它就不会转义。
  4. R是元字符,意思是 , 和
  5. 最后将下一行的所有内容与";任意字符&Quot;.与一个或多个限定符(+)匹配。

这篇关于使用正则表达式动态替换部分条件挡路的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆