正则表达式匹配“a> b> c”模式?

时间:2013-04-09 09:43:31

标签: regex

匹配“>”模式的正确正则表达式是什么或“|”至少有3次出现,如下例所示?我想要匹配“>”或“|” (不是两者)在给定文本中,两者之间的间距不规则。

应该匹配

  • “a> b> c> d> e”

  • “a | b | c | d | e”

不应该匹配

  • “a> b> c”(仅2“>”)

  • “a | b> c | d | e”(不是“>”或“|”)

用于测试表达式的示例Java代码 (只有反斜杠被转义)

public static void main(String[] args) {
    List<String> patterns = new ArrayList<String>();
    patterns.add("/((\\s*\\w+\\s*>\\s*){3,}|(\\s*\\w+s*\\|\\s*){3,})\\w/g");
    patterns.add("^( ([\\w\\s]*>){3,} | ([\\w\\s]*\\|){3,} )[\\w\\s]*$");
    patterns.add("/(>|\\|)[^>\\|]*\\1[^>\\|]*\\1/");
    patterns.add("/[\\w ]*([>|])(?:[\\w ]*\\1){2,}[\\w ]*/");

    List<String> test = new ArrayList<String>();
    test.add("a > b > c > d");
    test.add("a >b> c> d");
    test.add("a>b>c>d");
    test.add("a>b>c");

    for (String s : test) {
        for (int i = 0; i < patterns.size(); i++) {
            System.out.println(s + "[Pattern " + i + "] " + s.matches(patterns.get(i)));
        }
    }
}

4 个答案:

答案 0 :(得分:1)

/[\w ]*([>|])(?:[\w ]*\1){2,}[\w ]*/

匹配&gt;或者|,然后确保它再出现两次(至少)。

答案 1 :(得分:1)

/(\s*\w+\s*([>\|])\s*)(\s*\w+\s*\2\s*){2,}\w*/

这可以假设您需要一个字符(或多个|或&gt;符号之间) - 符号不能以任何方式混合应用了正则表达式的行。当然,处理不规则的间距。还会捕获完整的群组。

干杯。

答案 2 :(得分:0)

您可以尝试分组和反向引用

/(>|\|)[^>\|]*\1[^>\|]*\1/

答案 3 :(得分:0)

经过几次测试,我决定使用这个正则表达式:

((\\s)*(\\w)+((\\s)+(\\w)+)*(\\s)*((>)(\\s)*(\\w)+((\\s)+(\\w)+)*(\\s)*){3,})|((\\s)*(\\w)+((\\s)+(\\w)+)*(\\s)*((|)(\\s)*(\\w)+((\\s)+(\\w)+)*(\\s)*){3,})

匹配所有这些测试用例:

    test.add(" a > bbb >   ccc >   dc");//true
    test.add("a > b > c > d");//true
    test.add("a >b> c> d");//true
    test.add("a>b>c>d");//true
    test.add("a>b>c");//false
    test.add("a>b>c| d >e >f");//false
    test.add(">a>b>c> d >e >f");//false
    test.add("<a>b>c> d >e >f");//false
    test.add("a>b>c< d >e >f");//false
    test.add("a>b>c> d >e >f>");//false
    test.add("a b>b>c d > d >e >f> a bcd");//true,
    test.add("ayse ciog > ayse ciog > ayse ciog > ayse ciog");//true

现在获得成功,感谢你的帮助。

相关问题