我希望能够创建一个正则表达式,匹配任何被四个或更多点所跟随的内容:
但是它只会忽略最后四个点,因此它匹配
asdf.......
将匹配到asdf
。
我尝试使用:
.+?(?=\.{4,})
但是它只会忽略最后四个点,因此它匹配
asdf...
。要如何实现?asdf.......
将匹配到asdf
。
我尝试使用:
.+?(?=\.{4,})
asdf...
。要如何实现?.+?(?=\. {4,})
正则表达式匹配asdf
在asdf.......
中,因为它找到了值后面有4个或更多点,但是由于\.{4,}
在非消耗模式内,所以.......
仍然需要检查,那个子字符串的第一个.
再次匹配,因为.+?
匹配任何1个或多个字符(除换行符之外),但尽可能少。同样的事情也发生在第二个和第三个.
上,因为它们都跟着4个或更多逗号。
您可以将点匹配部分变为消耗模式并捕获.+?
(然后需要的值将在组1中):
(.+?)\.{4,}
(.*?)
是一个捕获组,匹配0个或多个字符(使用*
代替+
可匹配1个或多个),除了换行符以外的任何字符,\.{4,}
将匹配并消耗4个或更多.
字符(不允许在点内部检查匹配)。
(.*?)\.{4,}
,并获取第一组的值。 - Wiktor Stribiżew.
的类:[^.]+(?=\.{4,})
。尽管如此,Wiktor 的解决方案可能更有效。 - Aaron.*[^.](?=\.{4})
。 - anubhava123.456....
匹配将仅返回我的解决方案中的456
,而使用anubhava的解决方案将正确返回123.456
),那么我的解决方案将失败,但如果搜索数据中没有点,则更有效率(根据regex101,我的解决方案在12个步骤中匹配你的样本数据,而anubhava的解决方案需要29个步骤,因为.*
在回溯到[^.]
匹配之前匹配到字符串的末尾)。 - Aaron