php - PHP 中可选字符的正则表达式匹配

标签 php regex preg-match-all

我正在使用 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/

相关文章:

php - 如何从php文件中获取jquery函数中的信息

php - 使用PHP的邮件功能时如何在收件人姓名中使用特殊字符

php - 使用 Snappy-Laravel 生成 PDF

javascript - Javascript获取youtube视频ID(正则表达式问题)

javascript - 创建自定义过滤器来更改标签 AngularJS 的属性

regex - 通过正则表达式重命名文件,大写问题

php - 在php中使用正则表达式将字符串转换为包含数字和字母的数组?

php - 使用 PHP 动态创建 JavaScript 并将其放在 <script> 标签之间

PHP - preg_match_all 没有搜索完整的字符串?

PHP/正则表达式 : Get a string within parentheses