Php 在mySQL regexp中使用多个值

Php 在mySQL regexp中使用多个值,php,mysql,regex,Php,Mysql,Regex,我有一个问题: SELECT * from arrc_Voucher WHERE VoucherNbr REGEXP "^1002" 这很有效-VoucherNbr是一个16个字符的代码,此查询查找前四位为1002的所有记录 现在我需要扩展它,我对正则表达式不是很在行。我需要能够找到前四位数字为1002、1010、2015或3156的所有记录。如果这些是完整的数字,我会用在: SELECT * from arrc_Voucher WHERE VoucherNbr IN (1002, 1010,

我有一个问题:

SELECT * from arrc_Voucher WHERE VoucherNbr REGEXP "^1002"
这很有效-VoucherNbr是一个16个字符的代码,此查询查找前四位为1002的所有记录

现在我需要扩展它,我对正则表达式不是很在行。我需要能够找到前四位数字为1002、1010、2015或3156的所有记录。如果这些是完整的数字,我会用在:

SELECT * from arrc_Voucher WHERE VoucherNbr IN (1002, 1010, 2015, 3156)
但既然我需要以这些数字开头的代码,那就行不通了。有人能帮我扩展regexp以便它可以查找多个值吗?为了让它更有趣,这些值不能硬编码;它们存储在数据库配置表中,并由自定义php函数以逗号分隔字符串的形式返回。因此,我需要能够编写查询,以便regexp可以获取返回字符串的值,而不是我提到的特定四个数字

VoucherNbr REGEXP "^(1002|1010|2015|3156)"
不可读,但回溯较少:

VoucherNbr REGEXP "^(10(02|10)|2015|3156)"
您当然也可以执行以下操作:

LEFT(VoucherNbr, 4) IN (1002, 1010, 2015, 3156)

更新:添加了第二个和第三个解决方案。

您可以使用以下正则表达式,使用(|)


谢谢你的各种选择。我可能会选择第一个,因为我们也将regexp用于其他查询,并且尽可能保持代码的相似性更容易。但是,是的,第三个肯定会起作用,如果我根本不打算处理regexp,我会使用它。
REGEXP "^(1002|1010|2015|3156)"