Java Regex:匹配字符串中的所有reocurring序列

时间:2014-04-13 06:10:27

标签: java regex

我读了一些例子来匹配字符串中所有出现的序列,但是这个例子我遇到了一些困难。我想按如下方式匹配表达式:

"test"-a-"test2"-b-"test3" ...//can alternate like this for any number of times

当我在上面的例子中测试我的代码时,它可以工作但是当我尝试一个例如下面的例子时它告诉我匹配成功但我不希望它成功。

"test"-a-"test2"-b"test3"  //this is successful but I want it to fail

我正在使用的正则表达式是:

^ ( ( \ " ( . * ) ? \ " ) * \ \  - ( [ a - z ] ) \ \ - \ " ( . * ) ? \ " ) + $ ;

3 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式

Pattern p = Pattern.compile("^(\"[^\"]+?\"-[a-z]-)+\"[^\"]+?\"$");

正如你所说:"它以引号中的一串字符开头,然后是一个由减号包围的单个小写字母,并且必须以引号"中的一串字符结束。

答案 1 :(得分:0)

试试这个。

    String[] str = new String[] { "\"test\"-a-\"test2\"-b-\"test3\"",
                                  "\"test\"-a-\"test2\"-b\"test3\"", 
                                  "\"test\"-a-\"test2\"b\"test3\"" };

    // quote then one or more lower letter quote - one lower letter - <same pattern till the end>
    Pattern p = Pattern.compile("^(\"[a-z]+\"-[a-z]-\"[a-z]+\\d\"-[a-z]-\"[a-z]+\\d\")$");

    for (String s : str) {
        Matcher m = p.matcher(s);
        System.out.println(s + (m.find() ? " found" : " not found"));
    }

输出:

    "test"-a-"test2"-b-"test3" found
    "test"-a-"test2"-b"test3" not found
    "test"-a-"test2"b"test3" not found

答案 2 :(得分:0)

您可以使用此:

String t = ...;
Pattern p = Pattern.compile( "\"[^\"]+?\"(?:-[a-z]-\"[^\"]+?\")+" );
Matcher m = p.matcher( t );
if( m.matches() ){
  // OK
} else {
  // not OK
}