供应代码正则表达式

时间:2018-02-06 11:20:15

标签: c regex

我正在尝试开发一个C代码,该代码使用正则表达式检查“Provisioning code”字符串的有效性。 “供应代码”格式应遵守以下法律:

如果不是空字符串,则此参数应该采用分层描述符的形式,并指定一个或多个节点。层次结构中的每个节点都表示为4个字符的子字符串,仅包含数字或大写字母。如果指示了多个节点,则每个节点用“。”分隔。 (点)。示例:“TLCO”或“TLCO.GRP2”。

我使用此链接App Engine Flexible to Cloud SQL

中的代码开始开发
// Old connection opening
db, err = sql.Open("mysql ", fmt.Sprintf("%s:%s@cloudsql(%s)/", user, password, connectionName))
// New connection opening, including dbName
db, err = sql.Open("mysql ", fmt.Sprintf("%s:%s@cloudsql(%s)/%s", user, password, connectionName, dbName))

这段代码工作正常,但我的问题是应该输入函数regcomp的最佳正则表达式。

我开始尝试使用与包含正好4个字符的大写或数字的字符串匹配的正则表达式,这意味着像TLCO或TLC2这样的示例尝试使用正则表达式“[A-Z0-9] {4}”但我得到了“不匹配”作为输出与匹配示例如TLC2。

是否有关于正确的正则表达式的建议应该输入regcomp并与“配置代码”匹配?

1 个答案:

答案 0 :(得分:2)

如果您还将REG_EXTENDED标记传递给regcomp方法(${m,n}修饰符才能正常工作),您可以使用以下可以正常使用的正则表达式:

^[A-Z0-9]{4}([.][A-Z0-9]{4})*$

C代码:

reti = regcomp(&regex, "^[A-Z0-9]{4}([.][A-Z0-9]{4})*$", REG_EXTENDED);

<强>详情

  • ^ - 字符串开头
  • [A-Z0-9]{4} - 4个大写ASCII字母或数字
  • ([.][A-Z0-9]{4})* - 零个或多个序列:
    • [.] - 文字.字符
    • [A-Z0-9]{4} - 4个大写ASCII字母或数字
  • $ - 字符串结束。