我需要编辑模板的区域并生成.htaccess
文件。这是.htaccess
文件的模板的一部分。 [NPAC_TMP:~core_dir]
是被替换的部分:
RewriteCond %{REQUEST_URI} !^[NPAC_TMP:~core_dir]/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ [NPAC_TMP:~core_dir]/$1
RewriteCond %{HTTP_HOST} ^(www.)?localhost:8888$
RewriteRule ^(/)?$ [NPAC_TMP:~core_dir]/index.php [L] ###DEFECTIVE LINE
Ruby Script:
template_tag = line.match(/\[NPAC_TMP:~(.*)\]/).to_s
param = template_tag.split("~")[1][0..-2]
if(param == "core_dir")
line[template_tag]= CONFIG[:core_dir]
temp_file.puts line
end
当脚本运行时,除最后一个脚本外,所有脚本都被正确替换:
RewriteCond %{REQUEST_URI} !^core/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ core/$1
RewriteCond %{HTTP_HOST} ^(www.)?localhost:8888$
RewriteRule ^(/)?$ [NPAC_TMP:~core_dir]/index.php [L] ###DEFECTIVE LINE
这不是此方法运行的唯一模板文件,并且在所有其他文件中,它在所有项目都被替换的情况下正常工作。
出于问题排查目的,我复制了RewriteCond %{REQUEST_URI} !^[NPAC_TMP:~core_dir]/"
并将其直接放在缺陷线下方。这个添加的项目已正确更新,但上面的项目仍未正确更新。
然后我在其下方放置了一个缺陷线的副本,并收到了两条有缺陷的线条,这让我相信它的结构就是这个完整的字符串构成了抛出REGEX的方式:{{1} }
非常感谢任何帮助。另外,如果您有关于如何缩短或改进脚本的Ruby部分的建议,我会全力以赴。
答案 0 :(得分:2)
忘了让小组不贪心:
template_tag = line.match(/\[NPAC_TMP:~(.*)\]/).to_s
应该是:
template_tag = line.match(/\[NPAC_TMP:~(.*?)\]/).to_s
解决了这个问题,现在匹配所有案例。
答案 1 :(得分:1)
你的正则表达式.*
中的\[NPAC_TMP:~(.*)\]
是贪婪的(它尽可能匹配),所以匹配
[NPAC_TMP:~core_dir]/index.php [L]
给你组
core_dir]/index.php [L
请参阅http://rubular.com/r/NbZxd5prdT
您应该使用[^]]*
(或[^]]+
代替.*
请参阅http://rubular.com/r/h0YcyWfvgu
下次如果遇到正则表达式问题,最好的方法是打印/删除匹配项,这样就可以看到匹配的内容。
我也总是在rubular中“开发”/编写我的正则表达式,以确保它们按照我的预期运行。