2011-08-04 93 views
0

我开始使用正则表达式,我想从这样的提取物价值

String test="[ABC]Name:User:Date: Adresse "; 

我想提取名称,用户,日期和住址 我可以做的伎俩与子和分裂

字符串中提取值
String test = "String test="[ABC]Name:User:Date: Adresse "; 
     String test2= test.substring(5,test.length()); 
     System.out.println(test2); 
     String[] chaine = test2.split(":"); 
     for(String s :chaine) 
     { 
      System.out.println("Valeur " + s); 
     } 

,但我想用正则表达式的尝试,我做过

pattern = Pattern.compile("^[(ABC)|:]."); 

,但它不“ t work

你能帮助我吗?

非常感谢

回答

0

你必须逃离[]here是一个工作的例子。

^\[(.*)\](.*):(.*):(.*):(.*)$

请注意,你的代码可能是更容易比保持在正则表达式变得复杂的情况下正则表达式。

有些人在遇到问题时想:“我知道,我会用 正则表达式。”现在他们有两个问题。 - 杰米Zawinski

+0

谢谢你的建议,你的引文确实是正确的,但我想中庸之道学一点正则表达式,以实践您的帮助 – user799698

1

String#split是真正实现你想要做的事情的最佳方式。话虽如此,与正则表达式,下面将给你相同的输出:

Pattern p = Pattern.compile("^(?:\\[ABC\\])([^:]+):([^:]+):([^:]+):([^:]+)$"); 
    Matcher m = p.matcher(test); 
    while (m.find()) { 
     System.out.println("Valeur " + m.group(1)); // Name 
     System.out.println("Valeur " + m.group(2)); // User 
     System.out.println("Valeur " + m.group(3)); // Date 
     System.out.println("Valeur " + m.group(4)); // Address 
    } 
+0

好,谢谢,但如果我想否定[ABC]为了得到唯一的名字,我该怎么做? – user799698

+0

不知道你在问什么,但我已经更新了代码,以便每个组都将映射到原始字符串中的单个元素。基本上,当你用'()'包装一个表达式时,你可以捕获那个组,然后你可以用'Matcher'来获取它。 –

+0

非常感谢!它的工作完美,但正则表达式变得更加复杂:p。我需要实践,所以我会阅读一些关于正则表达式的教程。 btw再次感谢你! – user799698