gpt4 book ai didi

java - 正则表达式 : match any file under a certain directory, 除非叶目录被称为 "script"

转载 作者:行者123 更新时间:2023-11-29 04:17:29 25 4
gpt4 key购买 nike

我需要一个正则表达式来匹配 /path/foo 下的任何文件,除非叶目录名为 script。因此,例如,这些应该匹配:

/path/foo/file.txt
/path/foo/bar/baz/file.txt
/path/foo/script/bar/file.txt <-- not the leaf directory, so this is fine

但这些不应该:

/path/bar/file.txt
/path/foo/bar/script/file.txt <-- leaf directory, so no match
/path/foo/script/file.txt

我已经尝试了一些东西,但它们都有一些小问题:

  1. /path/foo/(?!.*script)/[^/]* 如果叶目录包含字符串“script”则匹配
  2. /path/foo(?!.*/script)/[^/]* 匹配像 /path/foo1/script/file.txt/这样的路径
  3. /path/foo/(?!.*/script)/[^/]* 仅当 fooscript 之间有层时匹配,或者由于某种原因 foo 之后有 2 个斜线

我不太明白。基本上,我需要在 foo 之后放置任意数量的 /[^/]+,然后我可以使用 (?!/script) 作为消极的前瞻。我该如何编写该正则表达式?

最佳答案

你可以使用

^/path/foo/(?!(?:.*/)?script/[^/]*$).*

参见 regex demo

详情

  • ^ - 输入开始
  • /path/foo/ - 文字子串
  • (?!(?:.*/)?script/[^/]*$) - 如果在当前位置之后紧接着有
    • (?:.*/)? - 任意 0+ 个字符的可选序列,尽可能多,后跟 / - 这表示任意数量的子目录在 /path/fooscript/filename
    • 之间
    • script/ - 表示 script 目录的文字子字符串
    • [^/]* - 除 / 之外的任何 0+ 个字符表示最终文件名,因此使 script/ 上面的叶目录
    • $ - 字符串结尾完成文件名并确保字符串上没有其他目录
  • .* - 字符串的其余部分。

关于java - 正则表达式 : match any file under a certain directory, 除非叶目录被称为 "script",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com