我有一个HTML页面,我需要替换其中的几行。但是,使用replace
似乎无法找到比单行更大的内容。
这就是我想要替换的内容(页面中有多个实例):
....
<div class="logo">
<img src="resources/logo.svg" />
<span>e</span>
<span class="text">Market</span>
</div>
...
这是我正在尝试的代码,但它不起作用:
index-html: read %index.html
logo-div: {<div class="logo">
<img src="resources/logo.svg" />
<span>e</span>
<span class="text">Market</span>
</div>}
new-div: {...}
out: replace/all index-html logo-div new-div
write %index.html out
在我的^/
字符串中加入logo-div
来表示换行符并不起作用。
如何找到整个字符串?
(我使用的是Rebol2,但我认为Rebol3中的功能相同或非常相似。)
答案 0 :(得分:4)
我不确定replace
,但这是parse
良好运作的好机会:
index-html: read %index.html
out: copy ""
new-div: "..."
;;parse rules
title: [
{<div class="logo">} thru {</div>} (append out new-div) ;;appends replacement when it finds that class
]
rule: [
some [
title |
copy char skip (append out char) ;;copies every other char char
]
]
parse index-html rule
write %index.html out
没有索引文件,但这应该有效。花一些时间仔细研究字符串解析。它非常强大。
答案 1 :(得分:2)
我怀疑你面临的问题是元素之间可变数量的空格。如果您可以删除空格,则替换应该起作用:
>> data: {
{ line 1
{ line 2
{ line 3
{ line 4
{ <div>
{ line d1
{ line d2
{ </div>
{ line 5
{ line 6
{ }
== {
line 1
line 2
line 3
line 4
<div>
line d1
line d2
</div>
line 5
line 6
}
old-div: {
{ <div>
{ line d1
{ line d2
{ </div>
{ }
== {
<div>
line d1
line d2
</div>
}
>> new-div: {
{ <div>new line d1^/new line d2</div>
{ }
== "^/<div>new line d1^/new line d2</div>^/"
>> replace/all trim/all data trim/all old-div new-div
== {line1line2line3line4
<div>new line d1
new line d2</div>
line5line6}
>> data
== {line1line2line3line4
<div>new line d1
new line d2</div>
line5line6}
如果你想保留HTML缩进,那么kealist建议的解析可能是最好的选择。