2014-08-29 34 views
1

我有以下解析問題。在下面的第一個示例文本中,解析將在找到文本中的部分時碰到兩個命令塊。使用更改命令(Rebol2)時解析問題

下面試試(Rebol 2)。


sample-text: {<a href="javascript:gotoURL('displayContent.aspx?contentID=9&language=english#Deferred-member');">deferred member</a>} 

remove-anchors: func [sample-text][ 
    parse sample-text[ 
     some [ 
      to {<a href="javascript:gotoURL('displayContent.aspx?contentID=9} 
      begin: 
      thru {);">} 
      ending: 
      (print "Command 1 executed") 
      to "<" 
      begin: 
      thru ">" 
      ending: 
      (print "Command 2 executed") 
     ] 
    ] 
    return sample-text 
] 

結果:

remove-anchors sample-text 
Command 1 executed 
Command 2 executed 

然而,如果我插入命令,預計以除去它找到的文本的變化/部件部分,所述第一次更改/部分執行,但看起來分析命令的第二部分停止,因爲第二個執行塊沒有觸發。


sample-text: {<a href="javascript:gotoURL('displayContent.aspx?contentID=9&language=english#Deferred-member');">deferred member</a>} 

remove-anchors: func [sample-text][ 
    parse sample-text[ 
     some [ 
      to {<a href="javascript:gotoURL('displayContent.aspx?contentID=9} 
      begin: 
      thru {);">} 
      ending: 
      (print "Command 1 executed" change/part begin "" ending)  ;<<----- change 
      to "<" 
      begin: 
      thru ">" 
      ending: 
      (print "Command 2 executed" change/part begin "" ending)  ;<<----- change 
     ] 
    ] 
    return sample-text 
] 

結果:

remove-anchors sample-text 
Command 1 executed 
== "deferred member</a>" 

注意第二個命令似乎沒有出現打印不執行和解析未完成同時執行。

因爲我有多個不同類型的我試圖刪除HTML的這些作品,並多次出現在同一文本文本鏈接,我想通PARSE是正確的解決方案。

任何人都可以看到我在做什麼錯?如果你使用這個

remove-anchors: func [sample-text][ 
parse sample-text[ 
    some [ 
     to {<a href="javascript:gotoURL('displayContent.aspx?contentID=9} 
     begin: 
     thru {);">} 
     ending: 
     (print "Command 1 executed" change/part begin "" ending)  
     :begin             ; note this 
     to "<" 
     begin: 
     thru ">" 
     ending: 
     (print "Command 2 executed" change/part begin "" ending)  
    ] 
] 
return sample-text 

]

說明

回答

1

你的功能應該工作:
內部解析指針位於{);">}後的95內的數字指標。變化命令後,指數仍處於95,但樣本文本現在短得多,第二個搜索文本"to "<"後您解析指針,可能已經結束了。你可以看到,如果你在你的函數中使用這條線

(print "Command 1 executed" change/part begin "" ending print ending)  ;<<----- change 

,給你以下錯誤

** Script Error: Out of range or past end 
** Where: remove-anchors 
** Near: print ending 

所以,你有你的解析索引/指針設置回點,其中的開始你改變/刪除了你的文字。您在更改後會得到:begin

最好的建議是重新設置/初始化你的內部分析指針,如果你修改了你的分析輸入:刪除後你應該回到你的刪除開始,插入/修改後你應該首先去開始和然後到新項目的末尾。

+0

感謝sqlab。這解決了這個問題。 – Brock 2014-09-10 18:30:12