[英]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.