我正在使用 PHP 的正则表达式 preg_match() 来尝试匹配中间偶尔包含连字符的字符串。字母数字模式是一致的:3 个字母后跟 3 个数字和一个(可选)最后一个字母 示例:
RTE234
RTE-234
OR
DGF123R
DGF-123R
我的数据库保存字符串时没有任何破折号,但字符串的数据源现在开始有时包含它。所以我以前一直在工作的模式:
preg_match_all("/\b\(?([a-z0-9-]+)\)?\b/i", $subject, $matches);
需要调整,但我不确定如何形成允许可选连字符的多括号字符串。我的第一次尝试...
preg_match_all("/\b([a-z]{3}[-]?[a-z0-9-]+)\b/i", $subject, $matches);
如您所见,我可以更详细地了解前 3 个字母 - [az]{3} - 但可选的破折号语法是我不确定的 - [-]?
有什么建议么?