正则表达式不适用于Java代码,尽管它适用于正则表达式网站

时间:2018-02-22 02:31:51

标签: java regex

我想我太累了,但在阅读完所有的文档和教程后,我无法弄明白。我有以下代码:

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),相互之后三次(但不是同一个字母的三倍)。所以,这些是唯一可能的匹配:

  • “aaaaaabbbbbbaaaaaa”
  • “bbbbbbaaaaaabbbbbb”

此正则表达式正在regex101this页面上工作。但是,我的代码总是返回零而不是三。有什么选择我必须设置才能使它工作吗?

1 个答案:

答案 0 :(得分:6)

你非常接近。为了使正则表达式在Java String中工作,您必须转义\文字;否则编译器不会将值放在String中(无论如何)。喜欢,

Pattern regex = Pattern.compile(
        "(([ab])\\2{5})(?!\\1)(([ab])\\4{5})(?!\\3)(([ab])\\6{5})");

我得到(没有其他变化)

3