【发布时间】:2016-03-14 23:52:10
【问题描述】:
我正在尝试解析一些字符串输入,但我很难找到解决方案。不过,这一定是一种众所周知的模式——只是我不经常遇到的一种。
背景:我有一个简短的字符串关键字列表(“HEAD”、“GET”、“POST”、“PUT”),每个关键字后面都有额外的字符串数据。可以有多个序列,以任何顺序(“KEYWORD blah blah blah KEYWORD blah blah blah”)。没有像 XML 那样的终止字符或结束关键字——要么是关键字子句的新出现,要么是输入的结尾。示例:
str: {HEAD stuff here GET more stuff here POST other stuff here GET even more stuff here PUT still more stuff here POST random stuff}
我想要达到的输出:
results: [
"HEAD" ["stuff here"]
"GET" ["more stuff here" "even more stuff here"]
"POST" ["other stuff here" "random stuff"]
"PUT" ["still more stuff here"]
]
我在这方面的糟糕尝试是:
results: ["head" [] "get" [] "post" [] "put" []]
rule1: ["HEAD" (r: "head") | "GET" (r: "get") | "POST" (r: "post") | "PUT" (r: "put")]
rule2: [to "HEAD" | to "GET" | to "POST" | to "PUT" | to end]
parse/all str [
some [
start: rule1 rule2 ending:
(offs: offset? start ending
append select results r trim copy/part start offs
) :ending
| skip]
]
我知道规则 2 是老旧的——使用“to”运算符不是考虑这种模式的正确方法;当我希望它找到任何关键字时,它会跳到该规则块中第一个可用关键字的下一次出现。
任何提示将不胜感激。
【问题讨论】: