我正在尝试解析一个html页面:
url: https://dzone.com/articles/2-entity-framework-alternatives-or-give-me-data
html: read url
parse html [
to {<h1 class="article-title" itemprop="headline">}
thru {<h1 class="article-title" itemprop="headli
ne">}copy title to {</h1>}
]
probe title
无法理解为什么它不起作用,因为我收到错误“标题没有价值”
答案 0 :(得分:3)
我认为您使用的是Rebol / view,因为免费版本不会通过rebol3执行https。
如果你想查看某些内容是否有效,你应该查看该解析的返回值,并且你会看到它false
这意味着有一个问题你的解析规则。无论如何,这对我有用,虽然标签周围的引号不是必需的,因为<
和>
都是字符串分隔符。
>> parse html [
thru <h1 class="article-title" itemprop="headline">
thru <h1 class="article-title" itemprop="headline">
copy title to </h1> to end
]
== true
>> trim/head/tail title
== "2 Entity Framework Alternatives (or Give Me Data!)"
答案 1 :(得分:1)
它最不起作用,因为第一个to
在匹配的字符串之前停止了,因此thru
在第一次出现{{1}时开始,而不是你可能预期的第二个。在尝试搜索第二个匹配项之前,您需要跳过第一个匹配项。您可以使用另一个答案中显示的两个<h1 ...>
规则来实现此目的,或者只是重复两次规则以避免重复:
thru
请注意最终的parse html [
2 thru <h1 class="article-title" itemprop="headline">
copy title to </h1> to end
]
规则,如果您的规则成功到达终点,则会to end
返回parse
。 true
规则是一个占位符规则,因为您不关心to end
之后的内容,但想要到达输入的末尾。
编辑:测试您提交的代码可以正常运行未更改。编辑你的问题实际上已经解决了错误的原因。我可以使用您的original code重现您的问题。