我想匹配像aaaa,aaaad,adjjjjk这样的东西。像([a-z])\ 1+这样的东西被用来匹配重复的字符,但是我无法用四个字母来解决这个问题。
答案 0 :(得分: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());
}
}
结果:
true
答案 1 :(得分: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!
// ^^ ^^
答案 2 :(得分:6)
您可以将{n}
放在符合n
次的内容之后,以便:
([a-z])\1{3}
答案 3 :(得分:3)
预定重复的常规正则表达式模式为{4}
。
因此这里([a-z])\ 1 {3}应与你的4个字符相匹配。