正则表达式使用Java模式匹配字符串中的四个重复字母

Ano*_*ser 13 java regex character

我想匹配像aaaa,aaaad,adjjjjk这样的东西.类似于([az])\ 1+的东西用于匹配重复的字符,但我无法用四个字母来计算.

Mar*_*ers 21

您希望匹配单个字符,然后该字符重复三次:

([a-z])\1{3}
Run Code Online (Sandbox Code Playgroud)

注意:在Java中,您需要转义正则表达式中的反斜杠.


更新:之所以没有做你想要的是因为你使用的方法matches要求字符串与正则表达式完全匹配,而不仅仅是它包含正则表达式.要检查遏制,您应该使用Matcher该类.这是一些示例代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Program
{
    public static void main(String[] args)
    {
        Pattern pattern = Pattern.compile("([a-z])\\1{3}");
        Matcher matcher = pattern.matcher("asdffffffasdf");
        System.out.println(matcher.find());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

true
Run Code Online (Sandbox Code Playgroud)


pol*_*nts 17

不知道有限重复语法,你自己解决问题的技巧应该引导你:

([a-z])\1\1\1
Run Code Online (Sandbox Code Playgroud)

显然它并不漂亮,但是:

  • 有用
  • 它锻炼了你自己解决问题的能力
  • 它可能会引导您更深入地理解概念
    • 在这种情况下,知道有限重复语法的desugared形式

嘿家伙很酷的答案,但我有一个问题

  • "ffffffff".matches("([a-z])\\1{3,}") = true
  • "fffffasdf".matches("([a-z])\\1{3,}") = false
  • "asdffffffasdf".matches("([a-z])\\1{3,}") = false

我能为底部两个做些什么?

问题是在Java中,matches需要匹配整个字符串; 好像图案被^和包围了$.

不幸的是没有String.containsPattern(String regex),但是你可以随时使用这种模式围绕模式.*:

"asdfffffffffasf".matches(".*([a-z])\\1{3,}.*") // true!
//                         ^^              ^^
Run Code Online (Sandbox Code Playgroud)


Mic*_*zek 6

你可以把{n}东西放在匹配它的n时间之后,所以:

([a-z])\1{3}
Run Code Online (Sandbox Code Playgroud)