2010-12-14 63 views
0

对不起,如果标题不够描述。 我希望能够提取到一个组中,如果一个或多个特定格式的序列出现。Java RegEx检查一个或多个格式化的字符串

这是我的当前REGEX->(除去重复的斜线为清楚起见)

。):([AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2})(:[AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2})。

我知道我很接近但并不完全在那里。

因此,这些都是有效的

测试1:001-12345-67:ABC-DEFGH-IJ

返回TEST1,001-12345-67,:ABC-DEFGH-IJ(逗号分隔组)

WHATEVER:123-12345-12:987-98765-98:ASD-ASDFA-AS(当前正则表达式不适合这个工作)

返回什么,123-12345-12,:987-98765-98:ASD-ASDFA-AS

而且这些都不是

测试1:001-12345-67

WHATEVER:123-12345-12:HMMMM

这就像我需要做一个'。'的括号。为整个第二序列。感谢大家的沉思。 PS正则表达式使我的头受伤。

+0

你有没有尝试过的正则表达式插件的IntelliJ IDEA这是天才 – 2010-12-14 21:35:01

+0

能否请你澄清你想匹配的模式。对我们来说呢? – jjnguy 2010-12-14 21:37:29

+0

不,我用的是Netbeans IDE。 – NickG 2010-12-14 21:38:04

回答

0

我会做这样的事情:

/(.*?(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}){2,})/ 

,然后拆分捕获文本“:”来获得单独的块。

编辑:等等,你只是想要三个块,不管有多少组?这很容易。你可以通过调用split(':', 3)(而不是上述的结果只是split(':')得到它,或去为正则表达式的解决方案:

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})((?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})+)/ 

(第三组将与一个额外的开始“:”那你不希望,是可以的,如果你不介意,甚至更多)腹胀模式中删除:

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})*)/ 
+0

我想过接受第二个冒号后的任何内容,然后分别解析。然后需要检查第二部分的有效性,如果它没有通过,则弹出并继续,就好像它本来不匹配一样。 – NickG 2010-12-14 21:46:24

+0

@NickG:但你可以在一个正则表达式中轻松地检查它的有效性。 – 2010-12-14 21:48:06

+0

这看起来工作。非常感谢。经过一些额外的测试后,我会将其标记为已回答。谢谢 – NickG 2010-12-14 21:50:56

相关问题