java - 正则表达式接受带有单点的文件名

标签 java regex pattern-matching

我正在尝试构建一个正则表达式,它将验证具有单点的文件名,并且文件名具有以下划线分隔的三个部分

这是我的正则表达式:

(?<appname>[^_]*)_(?<eventtype>[^_]*)_(?<counter>[^_]*).*

输入字符串

ABA_ABA_2015_478.csv - 应该失败

ABA_ABA_2015478.js.csv - 应该失败

ABC_BCD_XYZ.js - 应该通过

请帮我解决这个问题。

最佳答案

您可以使用此正则表达式:

^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\.[^.]+$

RegEx Demo

如果您使用matches()如果您使用 Java 中的方法,则无需使用 anchor ,因为 anchor 是隐式的。

正则表达式分解:

  • ^ :开始
  • (?<appname>[^_.]+) :匹配并分组长度为 1+ 且不属于 _ 的任何字符和点
  • (?<eventtype>[^_.]+) :匹配并分组长度为 1+ 且不属于 _ 的任何字符和点
  • _ :匹配_
  • (?<counter>[^._]*) :匹配并分组长度为 1+ 且不属于 _ 的任何字符和点
  • \. : 匹配一个点
  • [^.]+ : 匹配除点之外的任何1+长度的字符
  • $ :结束

对于 Java 使用:

final String re = "^(?<appname>[^_.]+)_(?<eventtype>[^_.]+)_(?<counter>[^._]*)\\.[^.]+$";

关于java - 正则表达式接受带有单点的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930229/

相关文章:

powershell - 有效提取匹配行,包括路径和行号?

Scala 2.8.0.RC2 编译器关于模式匹配语句的问题?

java - xhtml 上的 JSF/Primefaces 内联单元格编辑不起作用

java - 在 Java 中将数组分配给 ArrayList

regex - 正则表达式 : repeating groups only getting last group

sql - Postgres - 过滤掉单词但排除另一种模式

java - 消息传递(例如 JMS)何时可以替代多线程?

java - 在 Android 上,Java 可以调用 JNI,然后 JNI 调用回 Java 吗?

javascript - 如何在 JavaScript 中删除特定行(包括换行符)?

.net - 未找到字段 : System. Text.RegularExpressions.Regex.internalMatchTimeout