如何匹配xml中的模式

时间:2016-02-08 07:50:48

标签: xml perl unix

日志收集器采用路径来收集日志文件。如何省略path4目录中的“撤消”文件 从下面的路径收集日志,但忽略来自path4的撤消文件

<logs>  
    <log path="/path1/path2/path3/^[undo]*"/>  
</logs>

/path1/path2/path3/path4/undo1.txt
/path1/path2/path3/path4/undo2.txt

1 个答案:

答案 0 :(得分:0)

假设这个日志采集器采用perl正则表达式或类似的标记,那么它将是:

<logs>  
    <log path="/path1/path2/path3/(?!undo)[^/]*"/>  
</logs>

(根据日志收集器是否需要正则表达式来匹配整个文件名,最后可能不需要[^/]*

不幸的是,名称“日志收集器”有点泛,所以我实际上并不知道你的意思是什么软件,所以我不知道它实际上是否确实采用了perl正则表达式;参考您使用的实际软件会很有帮助。

好的,这是正则表达式应该匹配的东西,使用这个perl测试程序:

my $re = qr{/path1/path2/path3/(?!undo)[^/]*};

for (<>) {
  chomp;
  if ($_ =~ $re) {
    print "$_ matches\n"
  } else {
    print "$_ DOES NOT MATCH\n"
  }
}

这告诉我们:

/path1/path2/path3/foo.txt matches
/path1/path2/path3/bar.log matches
/path1/path2/path3/undo_5.txt DOES NOT MATCH
/path1/path2/path3/ matches

这就是为什么我真的想要一个指向该软件的指针。因为您说修改后的正则表达式不起作用,“撤消”文件仍然被拉入,这告诉我日志软件与正则表达式的完整文件名不匹配,而只是路径(目录)名称。我们可以从上面的证据中看出,正则表达式与名称以“undo”开头的文件不匹配。

由于您希望目录中的某些文件匹配而某些文件不匹配,您应该希望您的软件具有类似于单独file=属性的内容,该属性接受文件名的正则表达式。