奥加斯:如何搭配短跑



想要为双面排除文件编写镜头。示例:

+ /etc
- /

所以我的镜头是这样的:

module DuplyExclude =
  let nl = del /[n]+/ "n"
  let entry = [ label "entry" . [ label "op" . store /(+|-)/ ] . del /[ t]+/ " " . [ label "path" . store //[^ tnr]+/ ] ]
  let lns = ( entry . nl )*
  test lns get "+ /hellon+ /etcn- /" = ?

这会导致一个错误。我从一些实验中知道,正则表达式/(+|-)/与第二行不匹配。问题是:为什么破折号看起来不可匹配,即使被逃脱了?

这有两个原因:

  1. 测试字符串缺少一个尾随的n。这一点很重要,因为lns被定义为一个条目后面跟着一个无条件的新行。请注意,这只会真正影响使用augpresse的字符串测试,因为当通过库加载文件时,它会为读取的任何文件添加一个尾部(因为许多镜头无法处理丢失的EOL)
  2. 路径节点被定义为匹配单个/,然后是store //[^ tnr]+/中的至少一个(+)其他字符。这与单个/条目不匹配

因此,有了这两个变化,这个镜头就可以工作了:

模块DuplyExclude=设nl=del/[\n]+/"\n"let entry=[label"entry".[label"op".store/(\+|-)/]。del/[\t]+/"。[label"path".store/\/[^\t\n\r]*/]]设lns=(entry.nl)*测试lns是否获得"+/hello\n+/etc\n-/\n"=?
测试结果:/tmp/duplyexclude.aug:6.2-.44:{"条目"{"op"="+"}{"path"="/hello"}}{"条目"{"op"="+"}{"path"="/etc/"}}{"条目"{"op"="-"}{"path"="/"}}

相关内容

  • 没有找到相关文章

最新更新