string - 如何在同一规则中混合字符串解析和 block 解析?

标签 string parsing symbols rebol

Rebol 的 PARSE 方言足够泛化,这很酷,它可以对符号结构以及字符串进行模式匹配和提取。像这样:

; match a single "a" character, followed by any number of "b" chars
>> string-rule: ["a" some "b"]

>> parse "abb" string-rule
== true
>> parse "aab" string-rule
== false

; look for a single apple symbol, followed by any number of bananas
>> block-rule: ['apple some 'banana]

>> parse [apple banana banana] block-rule
== true
>> parse [apple apple banana] block-rule
== false

但是假设我正在寻找一个包含苹果符号的 block ,然后是与字符串规则匹配的任意数量的字符串:

; test 1
>> parse [apple "ab" "abbbbb"] mixed-rule
== true

; test 2
>> parse [apple "aaaa" "abb"] mixed-rule
== false

; test 3
>> parse [banana "abb" "abbb"] mixed-rule
== false

我如何制定这样的混合规则?查看文档,它建议人们可以使用 INTO:

http://www.rebol.net/wiki/Parse_Project#INTO

看似自然的答案似乎不起作用:

>> mixed-rule: ['apple some [string! into ["a" some "b"]]]

虽然它通过了测试 1 并在测试 3 中正确返回 false,但在测试 2 中错误返回 true。这是我的错误还是 Rebol 中的错误(我正在使用 r3 A111)?

最佳答案

史蒂夫在 REBOL3 forum建议这样做:

only the second string is checked.
Should be:
    ['apple some [and string! into ["a" some "b" ]]]

关于string - 如何在同一规则中混合字符串解析和 block 解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392533/

相关文章:

Java:在 E4X 中解析 XML 的方法?

javascript - 315 vs 315。这些符号的html代码是什么?

c++ - 由于 undefined symbol ,无效的 MEX 文件

c - 调用进程的符号查找?

java - 可靠地将任何对象转换为字符串,然后再返回

java - 在Java中从具有不同大小的2个数组列表中查找不相似的元素

c - 用于存储立即字符串的内存 session ,在 C 中

parsing - 如何解析简单的表达式?

c - 如何在C中随机排列字符串中的字符

c++ - 段错误 C++ 转换问题