4

HTML ページがあり、その中の数行を置き換える必要があります。ただし、を使用してreplaceも、1 行よりも大きなものは見つからないようです。

これは私が置き換えたいものです(ページには複数のインスタンスがあります):

....
<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 でも同じか非常に似ていると思います。)

4

2 に答える 2

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 の提案に従って解析するのがおそらく最適なオプションです。

于 2014-11-20T03:21:30.547 に答える