代码之家  ›  专栏  ›  技术社区  ›  user310291

将%%替换为<!-->

  •  1
  • user310291  · 技术社区  · 7 年前

    我想改变

     test: "bla bla %bla bla% bla bla bla bla %bla% bla"
    

     test: "bla bla <!--bla bla--> bla bla bla bla <!--bla--> bla"
    

    我认为这很容易,因为它是 red parsing and replacing double % with <> doesn't work

    但我的代码永远循环,尽管我有“结束”的规则:

    test: "bla bla %bla bla% bla bla bla bla %bla% bla"
    
    
    toggle: -1
    rules: [ 
        any [
            to "%" mark: (
                toggle: negate toggle 
                either toggle = 1 [change mark {} insert mark {<!--}][change mark {} 
                insert mark {-->}]
        ) 
        ]
        |
        to end
    ] 
    
    parse test rules
    test
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   rebolek    7 年前

    我不会使用 to (或 thru

    toggle: false 
    parse test [
        some [
            change #"%" (either toggle: not toggle ["<!--"]["-->"]) 
        |   skip
        ]
    ]
    

    此外,你可以摆脱 toggle ,如果您想:

    parse test [
        some [
            change #"%" (first reverse ["-->" "<!--"]) 
        |   skip
        ]
    ]
    
        2
  •  2
  •   sqlab    7 年前

    问题是您试图用空字符串交换“%”。“%”一直在那里,而且总是很受欢迎。您的规则适用于这些修改

    rules: [ 
        any [
            to "%" mark: (
                toggle: negate toggle 
                either toggle = 1 [
                    change/part mark  {<!--} 1 
                ][
                    change/part   mark {-->} 1
                ]
            ) 
        ] 
        to end
    ] 
    
        3
  •  2
  •   endo64    7 年前

    parse ,虽然没有优势,但只是另一种方式:

    until [none? attempt [insert remove find test "%" first reverse ["-->" "<!--"]]]