我想匹配像aaaaa,aaad,adjjjjk这样的东西。类似于([a-z])\1+的东西被用来匹配重复的字符,但我无法理解这四个字母。
不知道有限重复语法,你自己的解题技巧应该可以引导你找到这个问题。
([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!
// ^^ ^^
你想匹配一个字符,然后这个字符再重复三次。
([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
你可以把 {n}
对号入座 n
次,所以。
([a-z])\1{3}
一般的重复定义的regex模式是: {4}
.
因此这里([a-z])/1{3}应该与你的4个字符相匹配。