2

我想匹配包含关键字的所有路径,build除非它们还包含.html

这是一个使用负前瞻的工作正则表达式:https ://regexr.com/4msck

我正在使用正则表达式进行一致的路径匹配,它不支持负前瞻。如何在没有负前瞻的情况下复制上述正则表达式的功能?

4

2 回答 2

1

这是可能的,但生成的正则表达式在可读性和可维护性方面非常差。

http://regexr.com/4mst1

^(?:[^\.\n]|\.(?:$|[^h\n]|h(?:$|[^t\n]|t(?:$|[^m\n]|m(?:$|[^l\n])))))*build(?:[^\.\n]|\.(?:$|[^h\n]|h(?:$|[^t\n]|t(?:$|[^m\n]|m(?:$|[^l\n])))))*$

解释:

  • ^- 字符串/行的开始
  • (?:[^\.\n]|\.(?:$|[^h\n]|h(?:$|[^t\n]|t(?:$|[^m\n]|m(?:$|[^l\n])))))*- 匹配任何不包含.html
  • build- 从字面上看那个字符串
  • (?:[^\.\n]|\.(?:$|[^h\n]|h(?:$|[^t\n]|t(?:$|[^m\n]|m(?:$|[^l\n])))))*- 和之前一样
  • $- 字符串/行结束
于 2019-10-15T16:20:13.403 回答
0

根据手册,这应该有效。它基于评论:“我想忽略构建目录中的所有文件,除了 html 文件”

ignore = Regex .*build.*
ignorenot = Name {*.html}

我不熟悉unison,所以我必须假设您可以指定超过 1 条规则的路径。

由于手册中的这句话,我有这个期望:

还有一个ignorenot首选项,它为不应忽略的路径指定一组模式,即使它们与忽略模式匹配。

于 2019-10-15T13:24:56.733 回答