I want to match something like aaaa, aaaad, adjjjjk. Something like ([az])\\1+ was used to match the repeated characters, but I am not able to figure this out for four letters.
You want to match a single character and then that character repeated three more times:
([a-z])\1{3}
Note: In Java you need to escape the backslashes inside your regular expressions.
Update : The reason why it isn't doing what you want is because you are using the method matches
which requires that the string exactly matches the regular expression, not just that it contains the regular expression. To check for containment you should instead use the Matcher
class. Here is some example code:
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
Not knowing about the finite repetition syntax, your own problem solving skill should lead you to this:
([a-z])\1\1\1
Obviously it's not pretty, but:
I have a concern:
"ffffffff".matches("([az])\\\\1{3,}") = true
"fffffasdf".matches("([az])\\\\1{3,}") = false
"asdffffffasdf".matches("([az])\\\\1{3,}") = false
What can I do for the bottom two?
The problem is that in Java, matches
need to match the whole string; it is as if the pattern is surrounded by ^
and $
.
Unfortunately there is no String.containsPattern(String regex)
, but you can always use this trick of surrounding the pattern with .*
:
"asdfffffffffasf".matches(".*([a-z])\\1{3,}.*") // true!
// ^^ ^^
您可以将{n}
放在某物之后以匹配n
次,因此:
([a-z])\1{3}
General regex pattern for predefinite repetition is {4}
.
Thus here ([az])\\1{3} should match your 4 chars.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.