嵌入式Linux上的regcomp出现错误13:REG_BADRPT [重复]

uqjltbpv  于 2022-12-11  发布在  Linux
关注(0)|答案(1)|浏览(140)

此问题在此处已有答案

Using regex in C program to check password strength(1个答案)
2天前关闭。
在嵌入式Linux系统上,我有以下表达式:

string pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{4,}$";

呼叫:

ret = regcomp(&regex, pattern.c_str(), REG_EXTENDED);

给我错误:13,表示REG_BADRPT。
我试着在Windows PC上运行此代码,但它在那里不起作用,并出现相同错误。
在该Windows PC上,如果我执行以下操作:

ret = regcomp(&regex, 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(&regex, pattern.c_str(), REG_EXTENDED | 0400 | 01000 | 04000);

但它只是返回相同的错误:13.我认为这些标志在嵌入式linux上可能终究是不可用的。
有人对这个问题有什么建议吗?
谢谢

nkhmeac6

nkhmeac61#

Posix正则表达式不实现lookaroundAssert,因此(?是无效的,因为?必须遵循子模式。
不用正则表达式就可以很容易地编写这些检查,而编写一个在一次扫描中检查所有要求的单次扫描并不困难。

相关问题