如何匹配重复模式?

我想匹配:

some.name.separated.by.dots 

但我不知道怎么做。

我可以匹配这样的单个部分

  \w+\. 

怎么说“重复那个”

请尝试以下方法:

 \w+(\.\w+)+ 

+ after ( ... )告诉它匹配括号内的内容一次或多次。

请注意\w仅匹配ASCII字符,因此像café这样的单词不会与\w+匹配,更不用说包含Unicode的单词/文本了。

编辑

[...](...)之间的区别在于[...] [...]始终匹配单个字符。 它被称为“字符集”或“字符类”。 因此, [abc]与字符串"abc" 匹配,但匹配字符abc

\w+[\.\w+]*也匹配你的字符串是因为[\.\w+]匹配a . 或来自\w的字符,然后由*后面的*重复零次或多次。 但是, \w+[\.\w+]*也会匹配像aaaaaaaa...........这样的字符串。

正如我已经提到的, (...)仅用于对字符进行分组(并且可能重复这些组)。

有关字符集的更多信息: 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.srgs和一个空格,而(\w\.)+将匹配以上任何一个但不是空格。

如果你想匹配你的例子之类的东西,你需要做(\w+\.)+ ,这意味着’匹配至少一个非空白,然后是一个句点,并且至少匹配其中一个’。

 (\w+\.)+ 

显然,身体必须至少30个字符。 我希望这已经足够了。