繁体   English   中英

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

[英]Regex to match four repeated letters in a string using a Java pattern

我想匹配诸如 aaaa、aaaad、adjjjjk 之类的东西。 像 ([az])\\1+ 这样的东西被用来匹配重复的字符,但我无法弄清楚四个字母。

您想匹配单个字符,然后该字符再重复 3 次:

([a-z])\1{3}

注意:在 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());
    }
}

结果:

true

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

([a-z])\1\1\1

显然它不漂亮,但是:

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

我有一个顾虑:

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

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

问题是在 Java 中, matches需要匹配整个字符串; 就好像模式被^$包围。

不幸的是,没有String.containsPattern(String regex) ,但你总是可以使用这个用.*包围模式的技巧:

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

您可以将{n}放在某物之后以匹配n次,因此:

([a-z])\1{3}

预定义重复的一般正则表达式模式是{4}

因此这里 ([az])\\1{3} 应该匹配你的 4 个字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM