我想我太累了,但在阅读完所有的文档和教程后,我无法弄明白。我有以下代码:
import java.util.regex.*;
class Main {
public static void main(String args[]) {
String str = "ababaaabaaaaaabbbbbbaaaaaabaabababababaaaaaabbbbbbaaaaaabababababaaaaaabbbbbbaaaaaa";
Pattern regex = Pattern.compile("(([ab])\2{5})(?!\1)(([ab])\4{5})(?!\3)(([ab])\6{5})");
Matcher matcher = regex.matcher(str);
int counter666 = 0;
while (matcher.find()) ++counter666;
System.out.println(counter666);
}
}
我想在字符串中搜索相同字母的六次出现(应该是a或b),相互之后三次(但不是同一个字母的三倍)。所以,这些是唯一可能的匹配:
此正则表达式正在regex101和this页面上工作。但是,我的代码总是返回零而不是三。有什么选择我必须设置才能使它工作吗?
答案 0 :(得分:6)
你非常接近。为了使正则表达式在Java String
中工作,您必须转义\
文字;否则编译器不会将值放在String
中(无论如何)。喜欢,
Pattern regex = Pattern.compile(
"(([ab])\\2{5})(?!\\1)(([ab])\\4{5})(?!\\3)(([ab])\\6{5})");
我得到(没有其他变化)
3