Ответ 1
Попробуйте следующее:
\w+(\.\w+)+
+
после ( ... )
указывает, что он соответствует тому, что находится внутри круглой скобки один или несколько раз.
Обратите внимание, что \w
соответствует только символам ASCII, поэтому слово, подобное café
, не будет соответствовать \w+
, не говоря уже о словах/текстах, содержащих Unicode.
ИЗМЕНИТЬ
Разница между [...]
и (...)
заключается в том, что [...]
всегда соответствует одному символу. Он называется "набор символов" или "класс символов". Таким образом, [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
EDIT 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()
эквивалентны: это означает "полное совпадение".