这是输入文字:
<title>Company Selection</title>
<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />
我想用两行替换CSS引用:
<%@ include file="../common/cmufx.jsp" %>
<link rel="stylesheet" type="text/css" href="<%=basePath%>/<fmt:message key="application.version"/>/css/style_hbpSA_css.jsp" />
以下是Perl声明:
while(<>){
s{<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />}{
--><%@ include file="../common/cmufx.jsp" %>
<link rel="stylesheet" type="text/css" href="<%=basePath%>/<fmt:message key="application.version"/>/css/style_hbpSA_css.jsp" />;};
print;
}
在输出中我得到:
<title>Company Selection</title>
-->
<link rel="stylesheet" type="text/css" href="<%=basePath%>/<fmt:message key="application.version"/>/css/style_hbpSA_css.jsp" />
我的剧本的全部来源:
#!/usr/bin/perl
use strict;
use warnings;
while(<>){
s{<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />}{
--><%@ include file="../common/cmufx.jsp" %>
<link rel="stylesheet" type="text/css" href="<%=basePath%>/<fmt:message key="application.version"/>/css/style_hbpSA_css.jsp" />;};
s{<link rel="stylesheet" type="text/css" href="../css/style_hbp_css.jsp" />}{
<link rel="stylesheet" type="text/css" href="<%=basePath%>/<fmt:message key="application.version"/>/css/style_hbp_css.jsp" />};
s{<%@ include file="../common/cmufx.jsp" %>}{};
s{../img/banner.jpg}{<%=basePath%>/<fmt:message key="application.version"/>/img/banner.jpg};
print;
}
答案 0 :(得分:2)
它刚刚恍然大悟,你正在通过网络服务器查看结果不是吗? &lt; %%&gt;东西应该由模板程序或服务器端包括替换。你永远不会看到那个文字。很可能文件../common/cmufx.jsp不存在(例如路径错误)或者它什么都不包含。看看程序在命令行上吐出的内容。如果它是您所期望的那么问题就在其他地方(例如,cmufx.jsp的路径或您的ssi未正确设置)。
您的数据有一个空格,您的正则表达式具有/:
data V
<link rel="stylesheet" type="text/css" href="../css style_hbpSA_css.jsp" />
regex V
<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />
此外,您正在使用。在你的正则表达式而不逃避它们。的。正则表达式中的字符匹配换行符以外的任何字符(除非使用/ s选项)。您的正则表达式应该看起来像
s{<link rel="stylesheet" type="text/css" href="\.\./css style_hbpSA_css\.jsp" />}{}
或
s{<link rel="stylesheet" type="text/css" href="[.][.]/css style_hbpSA_css[.]jsp" />}{}
取决于哪个看起来不那么难看。第一个逃脱了。的特殊含义,第二个创建了一个字符的字符类,..
你说你还有问题,这是一个完整的脚本做正确的事情,你能告诉我们你的代码与此有何不同:
#!/usr/bin/perl
use strict;
use warnings;
while(<DATA>){
s{<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />}{
<%@ include file="../common/cmufx.jsp" %>
<link rel="stylesheet" type="text/css" href="<%=basePath%>/<fmt:message key="application.version"/>/css/style_hbpSA_css.jsp" />;};
print;
}
__DATA__
<title>Company Selection</title>
<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />
答案 1 :(得分:0)
首先,我强烈建议不要使用正则表达式来操作HTML。使用类似HTML::Tree的内容。
尽管如此,当我尝试使用您的代码时,它仍然有用。我唯一改变的是我认为是一个错字:你的输入包括:
href="../css style_hbpSA_css.jsp"
你的模式是:
href="../css/style_hbpSA_css.jsp"
我假设你想要两者都一样(虽然在模式中加上'..'会更好。)
我要检查的一件事是输入文件中的奇怪(即Windows)行结尾。
答案 2 :(得分:0)
答案是在替换之后,我还要求
s{<%@ include file="../common/cmufx.jsp" %>}{};
因此这条线被删除了。
抱歉捣乱你的时间,我感谢你获取所有答案。
答案 3 :(得分:0)
这是因为你在{
之后有一个新行s{<link rel="stylesheet" type="text/css" href="../css/style_hbpSA_css.jsp" />}{ #your new line is here
<%@ include file="../common/cmufx.jsp" %>