我阅读了很多参考文献,但这很难理解。
请帮助改进我的代码。
我想替换
<script src="core.js"></script> to <temp src="core.js"></temp>
在我测试时,下面将实际输出我想要的内容。但是,在$ replace上,我只放了<temp
,为什么它可以替换结束标记???
$string = '<script src="core.js"></script>';
$pattern = '/^<script|<\/script>$/i';
// ^(start from script) | (or) $(end with script)
$replace = '<temp';
echo preg_replace($pattern, $replace, $string);
Out Put
<temp src="core.js"></temp>
非常感谢你的帮助和建议。
答案 0 :(得分:2)
你需要使用正则表达式吗?你能不能只使用str_replace?
$string = '<script src="core.js"></script>';
echo str_replace("script", "temp", $string);
修改强>
如果您觉得必须使用正则表达式,那么您遇到的问题是结束标记</script>
正在被<temp
替换。尝试使用捕获括号:
$string = '<script src="core.js"></script>';
$pattern = '/(<\/?)script([^>]*>)$/i';
$replace = '$1temp$2';
echo preg_replace($pattern, $replace, $string);
此处的模式可以理解为:
(<\/?)
:<
可选地后跟/
script
:文字字符串script
([^>]*>)
:任何字符不是>
0次或更多次,后跟>
在替换字符串中,$1
表示与第一个括号模式匹配的任何内容,第二个是2美元。
答案 1 :(得分:2)
很抱歉,如果这不能回答您的问题,因为您询问了正则表达式,但是如果您可以使用str_replace,那么通常情况下这样做会更好,而且速度要快得多。
$result = str_replace('<script', '<temp', $string);
$result = str_replace('script>', 'temp>', $result);
这个问题是,它不匹配字符串:
<script src="core.js"></script >
我不仅仅这样做的原因:
str_replace("script", "temp", $string);
是因为您可以在变量中包含“script”一词的其他内容,例如,如果js文件名为example.script.js