我有一个包含单词rules
两次的字符串。我需要找到并替换第二个单词。试着和str_replace()
一起玩弄但却得不到任何东西,第四个参数并不是我的预期。
以下是一个示例字符串:
http://localhost/proj1/modstart/admin/index.php?i=rules&sid=397ab1f6b8eb8a17787438a7e2e60ea3&mode=rules
我替换之后应该是这样的:
http://localhost/proj1/modstart/admin/index.php?i=rules&sid=397ab1f6b8eb8a17787438a7e2e60ea3&mode=manage
我读到preg_replace()
可以提供帮助,但我不知道如何编写模式。
想法?
P.S:不建议将字符串拆分为两个不符合我需求的变量。
答案 0 :(得分:0)
要不使用正则表达式,也不要将任何内容存储到第二个变量中,您可以使用str_replace()
中的strpos()
来使用$string = substr($string, 0, strpos($str, 'rules') + 5) . str_replace('rules', 'whatever', substr($string, strpos($string, 'rules') + 5));
:
rules
这将使完整的字符串到达$pos = strpos($string, 'rules') + 5;
$string = substr($string, 0, $pos) . str_replace('rules', 'whatever', substr($string, $pos));
的第一个实例的末尾,然后在字符串的第二部分上执行字符串替换,该字符串将包含该单词的任何其他实例。< / p>
同样的事情,但更清洁一点(是的,通过使用第二个变量):
$findMe = 'rules';
$replaceWith = 'whatever';
$pos = strpos($string, $findMe) + strlen($findMe);
$string = substr($string, 0, $pos) . str_replace($findMe, $replaceWith, substr($string, $pos));
如果要查找+替换的单词是动态的,或者您想在不同的页面上使用不同的单词,则可以 变量,如下所示:
{{1}}
答案 1 :(得分:0)
了解正则表达式是一个非常好的主意。在PHP中,您可以像这样完成查找/替换:
$result = preg_replace('/(rules.*?)rules/','$1manage',$str,1);
它基本上找到“规则”一次,然后是任何东西,然后再次规则,然后在第二次匹配之前将其全部放回并替换该单词。
答案 2 :(得分:0)
您应该使用正则表达式&gt;&gt;
$new = preg_replace('/\brules\b(?!.*\brules\b)/', 'manage', $old);
使用单词边界\b
是一个好主意,因此它不会匹配包含“规则”的更大字符串,例如“preudorules”
否定前瞻(?!.*\brules\b)
确保后面没有其他单词“规则”,因此您要替换的是最后一个。