2013-05-31 98 views
0

请帮助开发regEx表达式。我的要求是,以验证以下字符串,java regEx,真的很困惑

String="asdasd|adajjsd|asas,asdas|asda|sd"; 

模式ID [字符串] separatedByPipe [字符串] separatedByPipe [字符串]

例如:String="asdasd|adajjsd|asas"

重复上述模式,用逗号分隔,如果有多个字符串 ex:String="asdasd|adajjsd|asas,asdas|asda|sd";

我可以假设该模式将只重复最多3次,即在我的字符串中最多2个逗号。

附上我的TestClass

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TestReg { 

public static void main(String[] args) { 

    //String regex = "[a-z]+\\|[a-z]+,[a-z]+\\|[a-z]*"; 
    String regex = "([a-z]\\|[a-z]\\|[a-z]\\,?)+"; 
    //String regex = "[a-z]+\\|re{ 1}[a-z]+\\|re{ 1}[a-z]+[a-z]+\\|[a-z]+\\|[a-z]*"; 
    //String regex = "[a-z](|)[a-z](,)[a-z](|)[a-z]"; 
    //String pattern="([a-z][email protected])([a-z]+)(\\.[a-z]+)"; 
    //String inputString1 = "shdifhsdui-asdasd,shdifhsdui|abc"; 


    //String inputString1 = "";//failed 
    String inputString1 = "asdasd|adajjsd|asas,asdas|asda|sd";//success 
    //String inputString1 = "asdasd|adasd-asdas|asdasd";//success 
    //String inputString1 = "asdasd|adasd|asassa,asdas|asdasd";//failed 
    Pattern pattern1 = Pattern.compile(regex); 
    Matcher matcher1 = pattern1.matcher(inputString1); 
    boolean result = matcher1.find();   
    System.out.println(result); 
} 

}

大家好,

System.out.println ("asdasd|adajjsd|asa,s|sad|sdas,asd|as|as|da".matches ("([a-z]*\\|[a-z]*\\|[a-z]*\\,?)+")); 

工作般的魅力。那么为什么同样的问题不适用于我的上课。请help.Am使用JDK1.5

+0

因为在正则表达式中没有特殊含义,所以不需要反斜杠转义'''。 – Patashu

回答

1

此Java正则表达式将满足您的要求:

"[a-z]+(\\|[a-z]+){2}(,[a-z]+(\\|[a-z]+){2})*" 

这将验证输入,但提取我只想在逗号使用split()的部分,然后为每个部分在管道上分开:

for (String group : input.split(",")) { 
    String[] parts = group.split("\\|"); 
    // do something with the parts 
} 

这只是两行代码来获取您的数据。

+0

嗨,这是失败的下面的字符串。String inputString1 =“asdasd | adajjsd | asas,asdas | asda | sd |”;我在最后添加了一个额外的管道。我没有使用拆分方法的情况。 – Valath

+0

你的答案,如果使用“.matches()” method.I已编辑的问题是正确的。请看一看。匹配器()和匹配(),给出不同的输出。 – Valath

+0

我可以拆分工作,但你的榜样,你在最后期待​​一个空白领域? – Bohemian

0

改变字符串的正则表达式

String regex = "([a-z]*\\|[a-z]*\\|[a-z]*\\,?)+"; 

,然后尝试

String inputString1 = "asdasd|adajjsd|asas,asdas|asda|sd"; 
    String regex = "([a-z]*\\|[a-z]*\\|[a-z]*\\,?)+"; 
    Pattern pattern1 = Pattern.compile(regex); 
    Matcher matcher1 = pattern1.matcher(inputString1); 
    boolean result = matcher1.find();   

    System.out.println(inputString1.substring(matcher1.regionStart(), matcher1.regionEnd())); 
+0

嗨,这是失败的下面的字符串。 String inputString1 =“asdasd | adajjsd | asas,asdas | asda | sd |”;我最后添加了一个额外的管道。 – Valath

+0

我编辑了这个问题。请看一看。匹配器()和匹配(),给出不同的输出。 – Valath

0

你可以使用这个正则表达式

^(?!.*,$)[a-z]+(\\|[a-z]+,?)*$ 
+0

没有工作! :( – Valath

+0

@SujeeshSValath就应该在你的question..else的所有有效和无效组合没有人能够帮助你 – Anirudha

+0

我编辑了问题,请看看。匹配()和匹配(),给予不同的。输出 – Valath

0

分割上,对其进行验证,然后在|

String[] terms = string.split(","); 
for (String term : terms) { 
    String[] parts = term.split("\\|"); 
} 
+0

我已经编辑了问题,请看看匹配()和匹配(),给予不同的输出 – Valath

0

如果你想测试整个静态字符串作为一个字符串,那么这个正则表达式模式将帮助你..但如果你想测试不同的字符串由“|”分隔,那么你需要采取其他正则表达式模式。字符串正则表达式=“([az] {6} \ | [az] {7} \ | [az] {4} \,[az] {5} \ | [az] {2}?)+ “;

+0

你好,这是失败的以下字符串字符串inputString1 =“asdasd |。。adajjsd | ASAS,asdas | ASDA | SD | “我在最后添加一个额外的管道 – Valath

0

请尝试,如果这有助于:

String regex = "[a-z]*\\|*,*[a-z]*"; 

和休息的代码不应该需要改变。

+0

失败弦乐inputString1 = ”asdasd | adajjsd | ASAS,asdas | ASDA | SD |“ – Valath

+0

请试试这个字符串的regex =”[AZ] * \\ | * * [AZ] * \\ |。*。“;请写明是可能的,从您的角度来看的要求结合我去了Anirudh关于这一点的 –

+0

我已经编辑了问题,请看看匹配()和匹配(),给出不同输出。 – Valath