Rebol 编程/语言特性/解析/解析示例
外观
这是一个使用解析表达式匹配进行简单分割的示例。与 NONE 规则不同,此示例不会特别对待引号。可以轻松修改以满足您的需求。
simply-split: func [ input [string!] /local delimiter whitespace regular result split ] [ delimiter: charset ",;" whitespace: charset [#"^A" - #" " "^(7F)^(A0)"] regular: complement union delimiter whitespace ; result is a block containing the splits we collect result: copy [] ; turn off the default whitespace handling, ; since we handle whitespace explicitly parse/all input [ ; skip the leading whitespace any whitespace any [ ; no split encountered delimiter (append result copy "") any whitespace | copy split some regular (append result split) any whitespace [delimiter any whitespace |] ] ] result ]
SIMPLY-SPLIT 函数的行为类似于 PARSE 函数,它获取 NONE 规则(上面的示例),但 CSV 的情况除外。
simply-split {"red","blue","green"} ; == [{"red"} {"blue"} {"green"}]
; vowel variants vowel-after-consonant: charset "aeiouyAEIOUY" vowel-otherwise: charset "aeiouAEIOU" ; consonant variants consonant-after-consonant: exclude charset [ #"a" - #"z" #"A" - #"Z" ] vowel-after-consonant consonant-otherwise: union consonant-after-consonant charset "yY" ; adjusting the Vowel and Consonant rules to the Otherwise state otherwise: first [ ( ; vowel detection does not change state vowel: vowel-otherwise ; consonant detection changes state to After-consonant consonant: [consonant-otherwise after-consonant] ) ] ; adjusting the Vowel and Consonant rules to the After-consonant state after-consonant: first [ ( ; vowel detection provokes transition to the Otherwise state vowel: [vowel-after-consonant otherwise] ; consonant detection does not change state consonant: consonant-after-consonant ) ] measure: [ ; initialization ( ; zeroing the counter m: 0 ) ; setting the state to Otherwise otherwise ; initialization end any consonant any [some vowel some consonant (m: m + 1)] any vowel ]