簡體   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