匹配“>”模式的正确正则表达式是什么或“|”至少有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)));
}
}
}
答案 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
现在获得成功,感谢你的帮助。