我正在使用 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 个字母 - [a-z]{3} - 但可选的破折号语法是我不确定的 - [-]?
有什么建议吗?
最佳答案
匹配的简单模式是
"\b[a-z]{3}-?[0-9]{3}[a-z]?\b"
在这种情况下,您不需要括号来匹配 -
等单个字符,只需使用 a?
, b*
, c{3}
或任何您想要匹配的内容。
关于php - PHP 中可选字符的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17610956/