Java 正则表达式模式与数据和日期匹配 我只需要在文件名的起始处筛选出与[LCKI]或OpNy]匹配的字符串,而不考虑其他任何地方。
源字符串示例:Java 正则表达式模式与数据和日期匹配 我只需要在文件名的起始处筛选出与[LCKI]或OpNy]匹配的字符串,而不考虑其他任何地方。,java,regex,pattern-matching,Java,Regex,Pattern Matching,源字符串示例: 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_uuxxxxx匹配 如何组合我的请求[忽略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_uuxxxxx匹配
如何组合我的请求[忽略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]
^(LCK|OPN|)
-^
表示输入的开始
要将其与正则表达式的其余部分结合起来,请跳过任意数量的任意字符:
^(?:LCK_|OPN_).*(19|20)\\d\\d.....
(使用?:
如果您不想将LCK_
和OPN_
捕获到一个组中)。^(LCK_124;OPN)
-^
代表输入的开始
要将其与正则表达式的其余部分结合起来,请跳过任意数量的任意字符:
^(?:LCK_|OPN_).*(19|20)\\d\\d.....
(如果不想将
LCK_
和OPN_
捕获到一个组中,请使用?:
。文件的开头,还是行的开头
试试这个
"^(LCK_|OPN_).*"
文件的开头,还是行的开头 试试这个
"^(LCK_|OPN_).*"
考虑以下代码:
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\u
或OPN\u
之外的任何内容(由?!
表示),然后匹配0个或多个任意字符,然后匹配日期模式,然后可能匹配多个字符。考虑以下代码:
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\u
或OPN\u
以外的任何内容(由?!
表示),然后匹配0个或更多任意字符,然后匹配日期模式,然后可能匹配多个字符。谢谢。我更新了我的问题。我正在努力合并它们,请检查更新的答案。使用*
跳过不相关的输入。我尝试了^(?: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\\d临时LCK|2012-11-07-121600[例如]不匹配,这很好,对吗?你在抱怨“但它也和TEMP_LCK_uuxxxxx匹配。”谢谢。我更新了我的问题。我正在努力合并它们,请检查更新的答案。使用*
跳过不相关的输入。我尝试了^(?: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\\d临时LCK|2012-11-07-121600[例如]不匹配,这很好,对吗?你在抱怨“但它也匹配TEMP_LCK_uuxxxxx”。不匹配LCK_2012-11-07-121600,无论如何,如果以LCK_uo开头,它应该拒绝,所以我要求提供一种模式,它将过滤不以LCK_uo开头且匹配日期的字符串pattern@NitinGurram:再试一次。它在这三个示例字符串中对我有效。不匹配LCK_2012-11-07-121600无论如何,如果以LCK_开头,它应该拒绝。因此,我要求提供一种模式,该模式将过滤不以LCK_开头的字符串并匹配日期pattern@NitinGurram:再试一次。它在这三个示例字符串中对我有效。