我想转型
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
的轻微变化但我的代码永远循环,尽管我已经&#34;结束&#34;规则:
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
答案 0 :(得分:3)
我不会使用to
(或thru
),它们有点危险IMO。我会使用类似的东西:
toggle: false
parse test [
some [
change #"%" (either toggle: not toggle ["<!--"]["-->"])
| skip
]
]
此外,如果您愿意,可以删除toggle
:
parse test [
some [
change #"%" (first reverse ["-->" "<!--"])
| skip
]
]
答案 1 :(得分:2)
问题来自您尝试用空字符串交换“%”。 “%”留在那里,总是受到打击。您的规则适用于这些修改
rules: [
any [
to "%" mark: (
toggle: negate toggle
either toggle = 1 [
change/part mark {<!--} 1
][
change/part mark {-->} 1
]
)
]
to end
]
答案 2 :(得分:2)
不使用parse
,虽然没有优势,只是另一种方式:
until [none? attempt [insert remove find test "%" first reverse ["-->" "<!--"]]]