c - POSIX ERE(扩展正则表达式)——从正则表达式中排除有限的黑名单

标签 c regex posix

我正在尝试使用 posix 做一个正则表达式来匹配一些 5 位数的数字:

551..
552..
553..

^(55[123]..)$

但我需要排除下一个数字:

55341 55312 55227

我正在尝试弄清楚如何使用 posix 创建一个匹配某些数字并排除另一个数字的正则表达式(因为我的程序是在 C 中)。


我目前正在使用 REG_EXTENDEDREG_ICASE 标志编译正则表达式:

status  = regcomp(&brb_regex->reg, regex_str, REG_EXTENDED|REG_ICASE);

...并按如下方式执行:

status  = regexec(&brb_regex->reg, cmp_str, 10, brb_regex->match, 0);

最佳答案

POSIX 正则表达式的唯一方法是困难的方法(您必须列出所有可能的情况):

^55(1[0-9][0-9]|2([013-9][0-9]|2[0-689])|3([0235-9][0-9]|1[013-9]|4[02-9]))$

(或使用 ^55[132][0-9][0-9]$ 并使用简单的 if 检查禁止数字)

关于c - POSIX ERE(扩展正则表达式)——从正则表达式中排除有限的黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315842/

相关文章:

c - TLE 至 酒店 (spoj)

C++11 简单正则表达式不适用于 gcc 4.9.1

c++ - 错误打印 posix_time

Linux 程序之间的通信

python - 将 datetime(1970,1,1) 转换为秒时出现意外结果

c - 通过调用带有二维数组参数的函数 print_array 来打印二维数组

c++ - 读取文件而不是将其作为参数传递

c - 代码效率不高

c++ - 如何让 PCRE 与 Code::blocks 一起正常工作?

javascript - 正则表达式表情符号替换字符串中的 url 失败