How to match repeated patterns?

Try the following:


The + after (?: ... ) tell it to match what is inside the parenthesis one or more times.

Note that \w only matches ASCII characters, so a word like café wouldn’t be matches by \w+, let alone words/text containing Unicode.


The difference between [...] and (?:...) is that [...] always matches a single character. It is called a “character set” or “character class”. So, [abc] does not match the string "abc", but matches one of the characters a, b or c.

The fact that \w+[\.\w+]* also matches your string is because [\.\w+] matches a . or a character from \w, which is then repeated zero or more time by the * after it. But, \w+[\.\w+]* will therefor also match strings like aaaaa or aaa............

The (?:...) is, as I already mentioned, simply used to group characters (and possible repeat those groups).

More info on character sets:

More info on groups:


Here’s an example in Java (seeing you post mostly Java answers):

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String text = " only but not Some other " + 
                "there and.we are done!";
        Pattern p = Pattern.compile("\\w+(?:\\.\\w+)+");
        Matcher m = p.matcher(text);
        while(m.find()) {

which will produce:

Note that and are equivalent: meaning “the entire match”.

Leave a Comment