Regex 如何忽略Mercurial中除了节点_模块内的所有bin文件夹?
我试图忽略解决方案中的所有*/bin/*,但节点\模块文件夹中的文件夹除外。因此:Regex 如何忽略Mercurial中除了节点_模块内的所有bin文件夹?,regex,mercurial,Regex,Mercurial,我试图忽略解决方案中的所有*/bin/*,但节点\模块文件夹中的文件夹除外。因此: /something/file.txt <- not ignored /something/bin/file.txt <- ignored /something/node_modules/anything/bin/file.txt <-not ignored /something/file.txt您需要在正则表达式的开头添加负查找(?) 负查找:确保给定的模式不匹配并在表达式中的当前位置结束
/something/file.txt <- not ignored
/something/bin/file.txt <- ignored
/something/node_modules/anything/bin/file.txt <-not ignored
/something/file.txt您需要在正则表达式的开头添加负查找(?)
负查找:确保给定的模式不匹配并在表达式中的当前位置结束。不使用字符
使用/(
此项不匹配:非foo
此匹配:但foo
试着这样做:
(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).*
(?如果使用逻辑,很可能无法使用此处所需的无限宽度查找
我建议在开始时使用前瞻:
^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
前瞻检查在最后一个\
模块之前,是否有0+个字符(除换行符外)尽可能多,后面跟\
,然后再次检查在最后一个/bin/
模块之前,是否有0+个字符(除换行符外),尽可能多(注意:最后一个\/
可以替换为(?:$)\/)
检查字符串末尾的/
)。如果在/bin/
之前有一个/node\u modules/
,则此前瞻基本上会导致匹配失败
*\/bin\/.*
与包含/bin/
的行匹配
请参见“未忽略”表示不应存在正则表达式匹配?请尝试^(?。*/node\u modules\/).\/bin\/.
。哇!这确实有效!我在开始时添加了一个(?I)来忽略大小写是的,内联(?I)
修饰符将启用不区分大小写的搜索。
^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^