正则表达式匹配一系列点之前的任何内容

时间:2018-01-30 16:24:04

标签: regex

我想制作一个正则表达式,匹配任何由四点或更多点成功的东西:

asdf....... 

将与asdf匹配。

我试过了:

.+?(?=\.{4,})

但它只丢弃最后四个点,因此它匹配asdf...

怎么做?

2 个答案:

答案 0 :(得分:3)

.+?(?=\.{4,})正则表达式与asdf中的asdf.......匹配,因为它在值后面找到4个或更多点,但由于\.{4,}位于非消费模式中, .......仍有待检查,并且该子字符串中的第一个.再次匹配,因为.+?匹配除换行符之外的任何一个或多个字符,但尽可能少。第二个和第三个.也是如此,因为它们都跟着4个以上的逗号。

您可能要做的是让点匹配部分消耗并捕获.+?(然后您需要的值将在第1组中):

(.+?)\.{4,}

请参阅regex demo

此处,(.*?)是一个匹配0 +字符的匹配组(使用*代替+匹配1个或更多),而不是换行符和\.{4,}匹配并消耗4个或更多.个字符(不允许在点内部检查匹配)。

答案 1 :(得分:0)

^(?!\.+)(.+?)\.{4,}$

捕获4个或更多点之前的任何内容,但也要确保该字符串不是所有

如果您正在搜索更大的文档:

(?!\.).+?(?<!\.)(?=\.{4,})

请参阅此处查看first example

请参阅此处查看second example