解析字符串以找到第一个重复字符 - 功能与原始编码风格

One*_*Arb 4 rebol rebol2 red

我想解析一个字符串,找到一(character, n)组中找到的前N个重复字符.

例如,for "ozzllluu"和sets("u"=> 2),("d"=> 2),("l"=> 3)和("r"=> 3)......我想找到"lll",因为它是3个字符,发生在两个"你"之前.

程序式解决方案:

Rebol []

seq-set: [#"u" 2 #"d" 2 #"l" 3 #"r" 3]
str: "ozzllluu"

lastchar: ""
cnt: 1
seq-char: ""

foreach char str [
    either char = lastchar [ 
        cnt: cnt + 1
        if (select seq-set char) = cnt [
            seq-char: char
            break
         ]
   ][
        cnt: 1
   ]
   lastchar: char   
]

either seq-char = "" [
    print "no seq-char"
][
    print join "seq-char " seq-char
]
Run Code Online (Sandbox Code Playgroud)

我如何使用parse规则做同样的事情?

简而言之:

  • parse 在(character,n)set中找到的前n个重复字符的字符串
  • "功能"现有的程序代码
  • 狗食进入Rebol/Red!

Doc*_*bel 8

这是使用Red's Parse的解决方案(也适用于R3):

seq-set: [2 #"u" | 2 #"d" | 3 #"l" | 3 #"r"]
rule: [any [set char seq-set break | skip]]

red>> parse "ozzllluu" rule
red>> char
== #"l"
Run Code Online (Sandbox Code Playgroud)