我想用preg_filter
替换我的自定义creted标签来实现JS脚本:
preg_filter(
"/<!--@SCRIPT-->.*$<!--@SCRIPT-->/",
'<script type="text/javascript" src="$0"></script>',
'<!--@SCRIPT-->/test.js<!--@SCRIPT-->
);
自:
<!--@SCRIPT-->/test.js<!--@SCRIPT-->
我得到:
<script type="text/javascript" src="<!--@SCRIPT-->/test.js<!--@SCRIPT-->"></script>
如何重写该正则表达式以使$0
组不包围<!--@SCRIPT-->
?
换句话说,如何缩小这个群体以获得:
<script type="text/javascript" src="/test.js"></script>
答案 0 :(得分:2)
您必须使用捕获组(...)
来提取标记之间的内容。然后,您可以使用$1
在替换字符串中引用它。
$result = preg_filter('~<!--@SCRIPT-->([^<]*)<!--@SCRIPT-->~',
'<script type="text/javascript" src="$1"></script>',
'<!--@SCRIPT-->/test.js<!--@SCRIPT-->');
这适用于我们的特定情况,但是我不确定preg_filter()
是完成此任务的好选择,因为如果没有匹配则返回空字符串。最好以同样的方式使用preg_replace()
:
$result = preg_replace('~<!--@SCRIPT-->([^<]*)<!--@SCRIPT-->~',
'<script type="text/javascript" src="$1"></script>',
'<!--@SCRIPT-->/test.js<!--@SCRIPT-->');
答案 1 :(得分:0)
试试这个 -
preg_filter(
"/<!--@SCRIPT-->(.*?)<!--@SCRIPT-->/",
'<script type="text/javascript" src="$1"></script>',
'<!--@SCRIPT-->/test.js<!--@SCRIPT-->'
)
/* OUTPUT */
string '<script type="text/javascript" src="/test.js"></script>' (length=55)