我想制作一个正则表达式,匹配任何由四点或更多点成功的东西:
asdf.......
将与asdf
匹配。
我试过了:
.+?(?=\.{4,})
但它只丢弃最后四个点,因此它匹配asdf...
。
怎么做?
答案 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