Dynamically replace part of a condition block with regex(使用正则表达式动态替换部分条件挡路)
本文介绍了使用正则表达式动态替换部分条件挡路的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
存在格式为:的字符串
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。
Q
.E
表示按字面意思对待这两个元字符之间的所有内容(&Q)- 则需要转义的唯一字符是第一个
$
,这并不是要阻止它被解释为字符串结尾的元字符,而是要将其解释为$rule
变量的开始,因为模式用双引号括起来。 - 模式中的第二个
$rule
确实需要解释为变量,这样它就不会转义。 R
是元字符,意思是 , 和- 最后将下一行的所有内容与";任意字符&Quot;
.
与一个或多个限定符(+
)匹配。
这篇关于使用正则表达式动态替换部分条件挡路的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用正则表达式动态替换部分条件挡路


猜你喜欢
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
- Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01
- 如何在 Symfony2 中正确使用 webSockets 2021-01-01
- PHP - if 语句中的倒序 2021-01-01
- 覆盖 Magento 社区模块控制器的问题 2022-01-01
- 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01
- PHP foreach() 与数组中的数组? 2022-01-01
- 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
- 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01