java - 正则表达式模式与数据和日期匹配

标签 java regex pattern-matching

我只需要在文件名开头过滤掉与[LCK_或OPN_]匹配的字符串,而不考虑其他任何地方。

示例源字符串:

LCK_card_L02NOR19999_2012-11-07-121600 [Invalid/Filter it]
BLTM_L183ROP3289_2012-11-07-121601 [Valid one]
TEMP_LCK_card_L02NOR19999_2012-11-07-121600 [Valid one]

我尝试过这样的:

LCK_|OPN_

但它也匹配 TEMP_LCK_XXXXX。

如何组合我的需求的模式[忽略 LCK_ 或 OPN_ 并提取日期]?

我的日期提取正则表达式模式

(19|20)\\d\\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-]\\d\\d\\d\\d\\d\\d]

最佳答案

考虑这段代码:

String[] strs = new String[] {
    "LCK_card_L02NOR19999_2012-11-07-121600", // Invalid
    "BLTM_L183ROP3289_2012-11-07-121601", // Valid one
    "TEMP_LCK_card_L02NOR19999_2012-11-07-121600" // Valid one
};

String pattern = "^(?!(LCK_|OPN_))(.*)((19|20)[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])-[0-9]{6}).*";

for (String string : strs) {
    boolean m = string.matches(pattern);
    System.out.println(m ? "Valid" : "Invalid");
}

这将首先匹配字符串的开头(由 ^ 表示),然后匹配 除了 LCK_OPN_ (用 ?! 表示),然后是 0 个或多个任意字符,然后是您的日期模式,然后可能是多个字符。

关于java - 正则表达式模式与数据和日期匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739366/

相关文章:

java - Activiti - DelegateExpression 未解析

haskell - 在 Haskell 函数定义的参数符号之间使用冒号有什么作用?

scala - 从模式匹配中返回依赖于路径的类型

haskell - 模式匹配语法不是构造函数应用程序语法

java - ...hbm.xml 文件在哪里?

java - Spring Integration - 聚合和转换

regex - 我如何选择标记 (*) 之间的多行,不包括最后一行(使用 sed)?我如何选择所有其余的?

Python-正则表达式解析文件

java - Android:以编程方式在新 Activity 中创建线性布局

regex - 多行的 Emacs 编译模式正则表达式