使用Java模式匹配字符串中四个重复的字母的Regex。

问题描述 投票:13回答:4

我想匹配像aaaaa,aaad,adjjjjk这样的东西。类似于([a-z])\1+的东西被用来匹配重复的字符,但我无法理解这四个字母。

java regex character
4个回答
17
投票

不知道有限重复语法,你自己的解题技巧应该可以引导你找到这个问题。

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

显然这不是很好,但是... ..:

  • 但是,它是可行的
  • 锻炼自己的解题能力
  • 可能会让你对概念有更深的理解。
    • 在这种情况下,知道了有限重复语法的去掉句法形式

我有一个担心。

  • "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!
//                         ^^              ^^

21
投票

你想匹配一个字符,然后这个字符再重复三次。

([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());
    }
}

Result:

true

6
投票

你可以把 {n} 对号入座 n 次,所以。

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

3
投票

一般的重复定义的regex模式是: {4}.

因此这里([a-z])/1{3}应该与你的4个字符相匹配。

© www.soinside.com 2019 - 2024. All rights reserved.