Попробуйте следующее:
\w+(\.\w+)+
+
после ( ... )
указывает, что оно совпадает с тем, что находится внутри скобок, один или несколько раз.
Обратите внимание, что \w
соответствует только символам ASCII, поэтому слово, подобное café
, не будет совпадать с \w+
, не говоря уже о словах / тексте, содержащем Unicode.
EDIT
Разница между [...]
и (...)
заключается в том, что [...]
всегда соответствует одному символу. Это называется «набор символов» или «класс символов». Таким образом, [abc]
не не соответствует строке "abc"
, но соответствует одному из символов a
, b
или c
.
Тот факт, что \w+[\.\w+]*
также соответствует вашей строке, объясняется тем, что [\.\w+]
соответствует .
или символу \w
, который затем повторяется ноль или более раз *
после него. Но \w+[\.\w+]*
также будет соответствовать строкам типа aaaaa
или aaa...........
.
(...)
, как я уже упоминал, просто используется для группировки символов (и, возможно, повторения этих групп).
Дополнительная информация о наборах символов: http://www.regular -expressions.info / charclass.html
Больше информации о группах: http://www.regular -expressions.info / brackets.html
РЕДАКТИРОВАТЬ II
Вот пример на Java (когда вы пишете в основном ответы на Java):
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "some.text.here only but not Some other " +
"there some.name.separated.by.dots and.we are done!";
Pattern p = Pattern.compile("\\w+(\\.\\w+)+");
Matcher m = p.matcher(text);
while(m.find()) {
System.out.println(m.group());
}
}
}
, который будет производить:
some.text.here
some.name.separated.by.dots
and.we
Обратите внимание, что m.group(0)
и m.group()
эквивалентны: это означает "все совпадение".