我想要匹配:
some.name.separated.by.dots
但我不知道怎么做。
我可以匹配像这样的单个部分
\w+\.
我怎么说“重复那个”
答案 0 :(得分:22)
尝试以下方法:
\w+(\.\w+)+
+
后( ... )
告诉它与括号内的内容匹配一次或多次。
请注意,\w
仅匹配ASCII字符,因此café
之类的字词不会与\w+
匹配,更不用说包含Unicode的字词/文字了。
[...]
和(...)
之间的区别在于[...]
始终与单个字符匹配。它被称为“字符集”或“字符类”。因此,[abc]
不匹配字符串"abc"
,但匹配其中一个字符a
,b
或c
。< / p>
\w+[\.\w+]*
也匹配您的字符串的事实是因为[\.\w+]
匹配.
或来自\w
的字符,然后由*
重复零次或多次{1}}之后。但是,\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()
是等效的:表示“整场比赛”。
答案 1 :(得分:2)
这也有效:
(\w+(\.|$))+
答案 2 :(得分:-1)
您可以使用?
匹配前面部分中的0或1,*
以匹配前面部分的任意数量的0和+
以匹配至少一个部分前面的部分。
所以(\w\.)?
将匹配w。并且空白,(\w\.)*
将匹配r.2.5.3.1.s.r.g.s.并且空白,(\w\.)+
将匹配以上任何内容,但不是空白。
如果你想匹配你的例子之类的东西,你需要做(\w+\.)+
,这意味着'匹配至少一个非空白,然后是一个句点,并且至少匹配其中一个'。
答案 3 :(得分:-2)
(\w+\.)+
显然,身体必须至少30个字符。我希望这已经足够了。