Я хотел бы соответствовать:
some.name.separated.by.dots
Но я понятия не имею, как это сделать.
Я могу сопоставить одну часть, подобную этой
\w+\.
Как я могу сказать "повторить это"
Я хотел бы соответствовать:
some.name.separated.by.dots
Но я понятия не имею, как это сделать.
Я могу сопоставить одну часть, подобную этой
\w+\.
Как я могу сказать "повторить это"
Попробуйте следующее:
\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
Вот пример в 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() эквивалентны: это означает "полное совпадение".
Это также будет работать:
(\w+(\.|$))+
Вы можете использовать ? для соответствия 0 или 1 предыдущим частям, *, чтобы соответствовать 0 для любого количества предшествующих частей, и + для соответствия хотя бы одной из предшествующих частей.
Итак, (\w\.)? будет соответствовать w. и пробел (\w\.)* будет соответствовать r.2.5.3.1.s.r.g.s. и пробел, а (\w\.)+ будет соответствовать любому из указанных выше, но не пустому.
Если вы хотите сопоставить что-то вроде вашего примера, вам нужно сделать (\w+\.)+, что означает "совпадение по крайней мере одного непробелкового пространства, затем периода и совпадения хотя бы одного из них".
(\w+\.)+
По-видимому, тело должно быть не менее 30 символов. Надеюсь, этого достаточно.