Java Track 1数据模式未关闭组错误

Java Track 1数据模式未关闭组错误,java,regex,Java,Regex,我有一个匹配银行卡磁道1数据的模式: private static final Pattern track1FormatBPattern = Pattern .compile("(%?([A-Z])([0-9]{1,19})\\^([^\\^]{2,26})\\^([0-9]{4}|\\^)([0-9]{3}|\\^)?([^\\?]+)?\\??)[\t\n\r ]{0,2}.*"); 然而,Android Studio声明存在一个未关闭的组。在我看来,所有组都关闭了。为了使

我有一个匹配银行卡磁道1数据的模式:

private static final Pattern track1FormatBPattern = Pattern
        .compile("(%?([A-Z])([0-9]{1,19})\\^([^\\^]{2,26})\\^([0-9]{4}|\\^)([0-9]{3}|\\^)?([^\\?]+)?\\??)[\t\n\r ]{0,2}.*");

然而,Android Studio声明存在一个未关闭的组。在我看来,所有组都关闭了。为了使模式能够干净地编译,需要添加/删除哪些内容(顺便说一句,它可以工作,就像将其标记为错误一样)。

看起来不错。您可能会删除角色类中的一些反斜杠<代码>“(?([A-Z])([0-9]{1,19})\\^([^^]{2,26})\^([0-9]{4}}\\^)([0-9]{3}\\^)([^?]+)?\\\)[\\t\\n\\r]{0,2}.*但过度转义在这里通常不是坏事。@zlakad Regex可能没有吸引力,因为它通常很难阅读。大多数人不使用空白模式,许多语言甚至不支持它。正则表达式可能会被设计良好的数据结构所取代。如果有一个好的数据类型解析器,那么这可能比使用正则表达式要好。但是,如果您了解regex,并且拥有一个好的regex引擎,那么regex可以成为快速高效地重新格式化数据的最轻量级工具,而不是依赖一个坏的或不存在的解析器。您还可以开始学习避免效率和行为陷阱的策略。我正在使用intellij idea,AS基于此,它对我来说没有错误。@gagansingh Yep,我也在idea中测试过它。可能谷歌在AS中做了一些“增强”,并引入了一个bug……你试过wp78de的建议吗?当
\t
\n
\r
正确转义时,它可能会修复此问题。