正则表达式匹配中断字符的总数

时间:2015-07-08 23:42:52

标签: regex

我需要能够检测字符串何时有8个或更多数字,即使它们被句点分隔 - 但总共8个或更多不能包含句点。换句话说,我可以在查找包含8个或更多数字的数字字符串时忽略句点。

我已经尝试过无数组合的捕获组和非捕获组,常规组和否定组,我只是无法弄明白。但是,我已经简化了下面的示例,以显示问题。

例如,以下正则表达式将匹配,即使总共只有6个数字,但总共有8个字符(显然):

Expression:   [0-9\.]{8,}
Text:         12.34.56

是否有正则表达式允许我忽略这些句点?

1 个答案:

答案 0 :(得分:2)

这将验证数字8次或更多次#include <memory> #include <iostream> template<typename T, typename TPtr> struct Deep { TPtr ptr; Deep() : ptr(new T) {} T get() const { return *ptr; } void set(T t) { *ptr = t; } Deep(const Deep& other): ptr(new T(*other.ptr)) {} }; template<typename T, typename TPtr> struct Shallow { TPtr ptr; Shallow() : ptr(new T) {} T get() const { return *ptr; } void set(T t) { *ptr = t; } Shallow(const Shallow& other) = default; }; template<typename T> using raw_ptr = T*; template<typename T> void test(const T& a1) { auto a2 = a1; a2.set(a2.get() + 1); std::cout << a1.get() << " " << a2.get() << std::endl; } using std::shared_ptr; int main() { Deep<int, raw_ptr<int> > rawDeep; rawDeep.set(1); test(rawDeep); Deep<int, shared_ptr<int> > sharedDeep; sharedDeep.set(1); test(sharedDeep); Shallow<int, raw_ptr<int> > rawShallow; rawShallow.set(1); test(rawShallow); Shallow<int, shared_ptr<int> > sharedShallow; sharedShallow.set(1); test(sharedShallow); }
基本上,单个数字^\D*(?:\d\D*){8,}$被可选的非数字\d包围 并且在一组中匹配,8次或更多次。

格式化:

\D