我有下面的解析问题。在下面的第一个示例文本中,当找到文本中的部分时,解析将命中两个命令块。
给下面的尝试(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但是,如果我插入命令的change/part部分(预期它将删除它找到的文本),则会执行第一个change/part,但是当第二个执行块没有触发时,解析命令的第二个部分就会停止。
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片段,并且在同一文本中出现多次链接,因此我认为解析是正确的解决方案。
有人能看出我做错了什么吗?
发布于 2014-09-09 13:05:39
如果您使用这个函数,您的函数应该可以工作。
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]
解释:
内部解析指针在{);">}之后的内部数字索引为95。在change命令之后,索引仍然是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后得到的。
最好的建议是重新设置/初始化内部解析指针,如果修改了解析输入:删除后应该回到删除的开始,插入/修改之后应该先回到新项的开始,然后再回到新项的末尾。
https://stackoverflow.com/questions/25575862
复制相似问题