首页 > 解决方案 > 在 Rebol PARSE 中,如何检查输入的开头?

问题描述

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

也许它存在,或者如何实现它?

我想工作的例子:

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

动机:

我正在尝试解析一些类似降价的模式,其中“*”开始强调,但前提是在空格之后或文本开头:[空格 | 开头]强调

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

标签: parsingrebol

解决方案


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

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

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

如果您只想在系列开始时进行测试:

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

您必须在开始时捕获该位置,或者以其他方式知道它以查看解析位置是否已经提前:

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

推荐阅读