在 Rebol PARSE 中,如何检查输入的开始?

In Rebol PARSE, how to check for begin of input?

我需要一个规则,我们称之为 AT-BEGIN,匹配输入的开头。

可能存在,或者如何实现?

我想工作的例子:

  1. 解析 "x" [AT-BEGIN "x"] => 匹配
  2. 解析“{some-other-chars}x”[到"x" AT-BEGIN "x"] => 不匹配

动机:

我正在尝试解析一些类似 markdown 的模式,其中一个 '*' 开始强调,但前提是在 space 之后或在 文本: [space |在开始] 强调

使用@hostilefork 解决方案我可以写: [to "*" pos: [if (head? pos) | (pos: back pos) :pos space] skip ...]

没有这样的规定。但是如果有的话,你必须定义你是否特别想知道它是在一个系列的开头......还是在你被要求从哪里开始解析的开头。例如这应该成功还是失败?

parse (next "cab") [to "a" begin skip "b"]

它不在系列的开头但是解析位置没有移动。这算不算开始?

如果您只想在系列的开头进行测试:

[to "a" pos: if (head? pos) ...]

您必须捕获开头的位置或以其他方式知道它以查看解析位置是否已经前进:

[start: to "a" pos: if (pos = start) ...]

也许不完全是你想要的,但是找到第一个匹配可以通过以下来完成。

您必须搜索 "b" 后跟 "a" 的补码模式。

>> text-to-searh: "jjjj ball  adran"
>> b*: complement charset "b"
>> parse/all text-to-search [ any [ b* #"a" | "a" hit:  to end | skip ] ]
>> probe hit
"ll  adran"

需要一些修改以匹配第一个字符为 "a" 的情况。 hit 将定位在 "a".

之后的字符处