REBOL解析HTML:得到错误“称号没有价值”
我试图解析HTML页:REBOL解析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!)"
rebol3是否支持https?在Win 32 v 2.101.0.3.1上,我得到: ''>>阅读https://www.dzone.com **访问错误:缺少端口方案:https – Edoc
因为第一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>
的内容,而是希望无论如何都能达到输入的结尾。
编辑:测试您提交的代码在这里工作正常不变。编辑你的问题实际上已经解决了错误的原因。我可以用您的original code重现您的问题。
我假设你有某种复制/粘贴错误编辑你的问题。但是如果你真的在你的字符串中有一个换行符,把它分割为''headli'和'ne'>'',这是一个多行字符串,并且会尝试将换行符作为内容的一部分,所以我把它放回去了这是你问题的真正根源。 – HostileFork
@HostileFork哎呀愚蠢的错误,我在火车上编码:) – user310291
请注意,** {无论}通过{无论} **将具有相同的效果,通过{无论} ** ...例如。 THRU包括TO的搜索逻辑以及数据的消耗。 – HostileFork