あなたはあまりにも多くのものを持っています。
red>> parse %abc/file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [%abc/ %file.ext]
red>> parse %/abc/file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [%/abc/ %file.ext]
red>> parse %/abc/def/file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [%/abc/def/ %file.ext]
入力にスラッシュがない場合、ルールが失敗するように「some」を使用しています。次に、「| keep (none)」を使用すると、「none you want」が保持されます。
「keep (something)」は、「do 方言」を介して「something」を実行した場合の戻り値を保持します。
red>> parse %file.ext [collect[keep [some [thru #"/"] | keep (none) ] keep to end]]
== [none %file.ext]
それがなければ、ファイル部分しか取得できません。
red>> parse %file.ext [collect[keep [any [thru #"/"]] keep to end]]
== [%file.ext]
red>> parse %/abc/def/file.ext [collect[keep [any [thru #"/"]] keep to end]]
== [%/abc/def/ %file.ext]