首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Change命令(Rebol2)解析问题

使用Change命令(Rebol2)解析问题
EN

Stack Overflow用户
提问于 2014-08-29 20:36:01
回答 1查看 43关注 0票数 1

我有下面的解析问题。在下面的第一个示例文本中,当找到文本中的部分时,解析将命中两个命令块。

给下面的尝试(Rebol 2)。

代码语言:javascript
复制
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
]

结果:

代码语言:javascript
复制
remove-anchors sample-text
Command 1 executed
Command 2 executed

但是,如果我插入命令的change/part部分(预期它将删除它找到的文本),则会执行第一个change/part,但是当第二个执行块没有触发时,解析命令的第二个部分就会停止。

代码语言:javascript
复制
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
]

结果:

代码语言:javascript
复制
remove-anchors sample-text
Command 1 executed
== "deferred member</a>"

注意,第二个命令似乎既没有执行打印,也没有执行解析。

由于文本中有多种不同类型的链接,所以我试图从文本中删除这些HTML片段,并且在同一文本中出现多次链接,因此我认为解析是正确的解决方案。

有人能看出我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-09 13:05:39

如果您使用这个函数,您的函数应该可以工作。

代码语言:javascript
复制
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 "<"之后,可能已经结束了。你可以看到如果你用这一行

代码语言:javascript
复制
   (print "Command 1 executed" change/part begin "" ending  print ending)        ;<<----- change

在您的函数中,给出以下错误

代码语言:javascript
复制
** Script Error: Out of range or past end
** Where: remove-anchors
** Near: print ending

因此,您必须将解析索引/指针设置为起始位置,在这里您更改/删除了文本。这是你在改变:begin后得到的。

最好的建议是重新设置/初始化内部解析指针,如果修改了解析输入:删除后应该回到删除的开始,插入/修改之后应该先回到新项的开始,然后再回到新项的末尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25575862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档