我正在尝试开发一个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并与“配置代码”匹配?
答案 0 :(得分:2)
如果您还将REG_EXTENDED
标记传递给regcomp
方法($
和{m,n}
修饰符才能正常工作),您可以使用以下可以正常使用的正则表达式:
^[A-Z0-9]{4}([.][A-Z0-9]{4})*$
C代码:
reti = regcomp(®ex, "^[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字母或数字$
- 字符串结束。