我有一个程序来编译正则表达式,它看起来像:
regex_t re;
if (regcomp(&re, "^[a-z0-9\\-#_]+$",REG_EXTENDED) != 0) {
printf("Error compiling %s\n");
}
基本上,我想匹配任何带有小写字母、数字、破折号、井号或下划线序列的字符。但上面的代码似乎因为破折号而失败:
Error compiling ^[a-zA-Z0-9\-#_]+$
根据我能找到的所有文档,在 posix 扩展正则表达式中,您应该能够-
在字符组中转义,但出于某种原因,这似乎在我的试验中不起作用。我还尝试了双重转义("^[a-z0-9\\\\-#_]+$"
),结果相同。我知道我可以将破折号放在字符组的末尾而根本不转义,但我想知道如果它位于字符组的中间,如何正确转义。
这是不正确的。来自POSIX 9.3.5 RE 括号表达式...
没有。您必须遵循解析规则,如同一文档中所述。
简直是噩梦。最简单的方法就是将仪表板放在前面或后面。
POSIX 正则表达式相当粗糙。对于任何严肃的事情,请考虑使用pcre或GRegex 。