我希望能够匹配像aaaa,aaaad,adjjjjk这样的字符。使用([a-z])\1+可以匹配重复的字符,但我无法解决四个字母的情况。
我希望能够匹配像aaaa,aaaad,adjjjjk这样的字符。使用([a-z])\1+可以匹配重复的字符,但我无法解决四个字母的情况。
([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("([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!
// ^^ ^^
您可以在某些字符后面加上{n}
来匹配它n
次,例如:
([a-z])\1{3}
预定义重复的一般正则表达式模式为{4}
。
因此,这里的([a-z])\1{3}应该匹配您的4个字符。