我正在尝试解析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
看不出为什么它不起作用,因为我会收到错误"标题没有值"
我假设您正在使用rebol/view,因为免费版本不做https,但rebol3却没有。
如果您想查看是否有效,则应查看分析的返回值,并且您会看到它是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!)"
它很可能是因为第一个to
在匹配的字符串之前停止,因此thru
在<h1 ...>
的第一个事件开始时开始您可能期望的第二个。在尝试搜索第二个之前,您需要跳过第一次发生。您可以使用另一个答案中所示的两个thru
规则来实现这一目标,或者只需两次重复该规则即可避免重复:
parse html [
2 thru <h1 class="article-title" itemprop="headline">
copy title to </h1> to end
]
注意最终的to end
规则,如果您的规则成功达到终点,它将使parse
返回true
。to end
规则是占位符规则,因为您不在乎</h1>
的内容,而是想到达输入的结尾。
edit :测试您提交的代码从此处 nOtchanged 正常工作。您的问题的编辑实际上修复了错误的原因。我可以用您的原始代码重现您的问题。