【问题标题】:Regular expression: match everything except *.TMP正则表达式:匹配除 *.TMP 之外的所有内容
【发布时间】:2023-03-10 00:09:01
【问题描述】:

我无法创建一个正则表达式来检查文件是否具有扩展名 .TMP,因此该模式应该接受任何不等于(a-z 0-9 或事件点).TMP 的字符串

明确一点:只有当文件没有 TMP 扩展名时,匹配器才会成功。

我已经发现我需要使用 (?!expression) 来表示“不”...

(?!.*TMP]) // is wrong ;-)

【问题讨论】:

  • 为什么不匹配.TMP 并在它匹配时执行?
  • 您需要正则表达式,还是只需要匹配具有 tmp 扩展名的文件?
  • 代码必须使用 spring 配置,我想使用 regEx 保持所有选项打开。必须可以接受以 blabla iso 开头的文件,并在需要时在其他实现中查看所有不以 .TMP 结尾的文件。
  • 有道理。但是为了使 Spring 上下文文件易于理解,您可能需要考虑使用正则表达式以外的方法。 .tmp 看起来比正则表达式 IMO 更好...

标签: java regex


【解决方案1】:
if (!filename.endsWith(".TMP")) {
     /* then we found a match without using regExp */
}

【讨论】:

  • +1 同意,应用正则表达式的问题太简单了。
  • +1 但在 OS X 或 Windows 上,您可能希望在进行比较之前将文件名转换为大写(不区分大小写的文件系统)。
【解决方案2】:
"(?<!\\.TMP)\\Z"

读取:除“.TMP”之外的其他内容,后跟字符串的结尾。

【讨论】:

  • “当你只有一个正则表达式时,每个问题看起来都像线路噪音”——我 ;)
  • @msw:这个问题明确要求一个正则表达式。我认为在回答所提出的问题时投反对票是不公平的。
  • 同意。这不是要“惩罚”发帖者,而是将答案移到堆栈中(这是自然发生的,因此取消了投票)。确实,问题确实要求使用正则表达式,但有时问题是错误的。我不希望你一定同意这个立场,但我希望你能理解。
【解决方案3】:

这不是你问题的答案,但我认为你应该看看 Apache Common IO,它有一堆简单的方法可以做你通常做的所有事情。包括寻找扩展。然后你只需做一个 if 语句而不是一个 reg。 exp.

http://commons.apache.org/io/

并查看 getExtension 的特定 java 文档: getExtension JavaDoc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 2022-08-21
    • 2018-05-26
    • 1970-01-01
    • 2019-11-12
    • 2023-03-08
    相关资源
    最近更新 更多