此问题在此处已有答案:
Using regex in C program to check password strength(1个答案)
2天前关闭。
在嵌入式Linux系统上,我有以下表达式:
string pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{4,}$";
呼叫:
ret = regcomp(®ex, pattern.c_str(), REG_EXTENDED);
给我错误:13,表示REG_BADRPT。
我试着在Windows PC上运行此代码,但它在那里不起作用,并出现相同错误。
在该Windows PC上,如果我执行以下操作:
ret = regcomp(®ex, pattern.c_str(), REG_PERL);
那么它就工作得很好。
在嵌入式风格中,REG_PERL不可用。
在Windows PC上,我可以看到REG_PERL实际上是:
REG_PERL = REG_EXTENDED | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | REG_PERLEX,
基本上就是:
REG_EXTENDED | 0400 | 01000 | 04000
我还尝试在嵌入式Linux中硬编码如下:
ret = regcomp(®ex, pattern.c_str(), REG_EXTENDED | 0400 | 01000 | 04000);
但它只是返回相同的错误:13.我认为这些标志在嵌入式linux上可能终究是不可用的。
有人对这个问题有什么建议吗?
谢谢
1条答案
按热度按时间nkhmeac61#
Posix正则表达式不实现lookaroundAssert,因此
(?
是无效的,因为?
必须遵循子模式。不用正则表达式就可以很容易地编写这些检查,而编写一个在一次扫描中检查所有要求的单次扫描并不困难。