regex 与之相反匹配的正则表达式:每个.pdf文件路径下包含一个字符串.不匹配文件夹

w7t8yxp5  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(105)

对不起,这有点难以解释和总结,但我正在处理一个只能基于应用于整个文件路径的正则表达式EXCLUDE项目的系统。我的愿望是让它只INCLUDE pdf文件,如果它们包含在“e-comps”的文件夹或子文件夹中。因为它只能排除,如果所有文件不在包含“e-comps”的路径中,我们将希望匹配所有文件(假设它们具有文件扩展名),以及包含“e-comps”的路径中的.pdf以外的任何文件。
示例输入:

client/
client/100-300/
client/100-300/101 abc/
client/100-300/101 abc/active/
client/100-300/101 abc/active/asset.pdf
client/100-300/101 abc/active/asset.doc
client/100-300/101 abc/e-comps/asset.pdf
client/100-300/101 abc/e-comps/asset.doc
client/100-300/101 abc/e-comps/asset.jpg
client/100-300/101 abc/e-comps/folder/asset.jpg
client/100-300/101 abc/e-comps/folder/asset.pdf

应匹配:

client/100-300/101 abc/active/asset.pdf
client/100-300/101 abc/active/asset.doc
client/100-300/101 abc/e-comps/asset.doc
client/100-300/101 abc/e-comps/asset.jpg
client/100-300/101 abc/e-comps/folder/asset.jpg

我已经尝试了基于.pdf扩展名的正则表达式,但是一旦我尝试添加任何关于“e-comps”的内容,我就会得到不理想的结果。
^.+(?=\.)(?!\.pdf).*$
我相信我正在与PCRE合作
谢谢大家!

w6lpcovy

w6lpcovy1#

如果您不介意匹配文件夹:

^                # At the beginning of string
(?!              # match something that is not
  (.+?\/)?       # 1 or more characters and a slash
  e-comps\/      # followed by 'e-comps/'
  ([^\/]+\/)*    # then 0 or more subfolders
  [^\/]*\.pdf    #                a PDF file.
  $              # then ends with
)                #

试试看on regex101.com
如果是,请添加另一个lookahead:

(?!              # Match something that is not
  ([^\/]+\/)+$   # 1 or more folders
)                #

试试on regex101.com
请注意,regex101上的正则表达式被修改了一点,这样它们就不会扰乱换行符。

相关问题