Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式模式:未关闭的组_Java_Regex - Fatal编程技术网

Java 正则表达式模式:未关闭的组

Java 正则表达式模式:未关闭的组,java,regex,Java,Regex,我需要匹配以下日期模式: dd-mmm-yyyy (TBC) dd-mmm-yyyy (TBD) dd-mmm-yyyy 但是我得到了以下异常,我不明白错误是什么。 我非常确定日期部分,我怀疑错误的来源是TBC/TBD部分,它必须是可选的 java.util.regex.PatternSyntaxException: Unclosed group near index 614 ^(29-02-(2000|2400|2800|(19|2[0-9](0[48]|[2468][048]|[1357

我需要匹配以下日期模式:

dd-mmm-yyyy (TBC)
dd-mmm-yyyy (TBD)
dd-mmm-yyyy
但是我得到了以下异常,我不明白错误是什么。 我非常确定日期部分,我怀疑错误的来源是TBC/TBD部分,它必须是可选的

 java.util.regex.PatternSyntaxException: Unclosed group near index 614
^(29-02-(2000|2400|2800|(19|2[0-9](0[48]|[2468][048]|[13579][26]))))[ \(TB(C|D)\)]$|^((0[1-9]|1[0-9]|2[0-8])-((FEB)|(feb)|(Feb)|(FEV)|(fev)|(Fev))-((19|2[0-9])[0-9]{2}))[ \(TB(C|D)\)]$|^((0[1-9]|[12][0-9]|3[01])-(((JAN)|(jan)|(Jan))((MAR)|(mar)|(Mar))((MAY)|(may)|(May)|(MAI)|(mai)|(Mai))((JUL)|(jul)|(Jul)|(JUI)|(jui)|(Jui))((AUG)|(aug)|(Aug)|(AUO)|(auo)|(Auo))((OCT)|(oct)|(Oct))((DEC)|(dec)|(Dec)))-((19|2[0-9])[0-9]{2}))[ \(TB(C|D)\)]$|^((0[1-9]|[12][0-9]|30)-(((APR)|(apr)|(Apr)|(AVR)|(avr)|(Avr))((JUN)|(jun)|(Jun)|(JUI)|(jui)|(Jui))((SEP)|(sep)|(Sep)((NOV)|(nov)|(Nov))-((19|2[0-9])[0-9]{2}))[ \(TB(C|D)\)]$
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ^
你有什么提示吗?
提前感谢

您的模式不是最佳的,甚至是错误的:

  • 月份名称之间缺少交替运算符
  • 重复次数太多,只是大小写不同:请使用不区分大小写的标志
  • [\(TB(C | D)\)]
    很可能是一个输入错误,因为它是一个字符类,与其中定义的单个字符相匹配,您需要
    (?:\(TB[CD]\)?
    ,这是一个可选的非捕获组
使用


请参见

使用regex101了解-。它会立即显示未配对的括号。顺便说一句,
[\(TB(C | D)\)]
是一个输入错误-为什么要将其放入字符类?我想你想写一下<代码>的想写的想想写的想想写的想想写的想想写的想想写的想想想写的想想想想写的想想想想想想想写的想想想想想写的想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想写的想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想想写的想想想想想写的想想想想想想想想想想想想想想想想写的想想想想想想想想想想想想想想想想想想想想想想想想想想想想写的想想想想想想想想想想想想想想想想想想写的想想想想想想想想想想想想想想想想想想想想想想想想想想想想| ^(0[1-9]|[12][0-9]|[3[01])-(1月|马[ryi]|朱[li]|欧[go]|欧[go]|十月|十二月)-(?:19 | 2[0-9])[0-9]{2 |(TB(C | D)\)?$| ^(0[1-9]|[12][0-9]| 30-(?:a[pv]r|ju[ni]| sep | nov-(?:19 | 2[0-9])[0-9]{2}(:\(TB(C | D)\)?$,看有什么原因必须用一个正则表达式来做这件事吗?这将是其他人维护的负担。剥离
(TBC)
(TBD)
,然后使用常规DateFormatter,将使您的代码更加清晰。我强烈建议您不要使用如此长而复杂的正则表达式。它很难阅读,而且很容易出错。这就是为什么您错过了两个括号,并在Stackoverflow上询问它的原因。使用这样的正则表达式ar表达式也可能会对性能造成影响。最好找到另一种方法来实现这一点,例如,使用VGR的建议。谢谢你,我对该工具一无所知。正则表达式字符串实际上是许多不同方法的串联结果,这些方法附加在同一个字符串上。由于它的结构,我认为它非常好而且非常简单杜拉尔。
(?i)^29-02-(?:2[048]00|(?:19|2[0-9](?:0[48]|[2468][048]|[13579][26])))(?: \(TB(C|D)\))?$|^(?:0[1-9]|1[0-9]|2[0-8])-fe[vb]-(?:19|2[0-9])[0-9]{2}(?: \(TB(C|D)\))?$|^(0[1-9]|[12][0-9]|3[01])-(jan|ma[ryi]|ju[li]|au[go]|oct|dec)-(?:19|2[0-9])[0-9]{2}(?: \(TB(C|D)\))?$|^(?:0[1-9]|[12][0-9]|30)-(?:a[pv]r|ju[ni]|sep|nov)-(?:19|2[0-9])[0-9]{2}(?: \(TB(C|D)\))?$