在mysql中使用REGEX对特定字符进行严格的数字检查

时间:2013-08-27 16:01:17

标签: php mysql regex

在我的数据库中,数据存储如下:

Q_101_B1
Q_101_B2
Q_101_B17
Q_101_Bch1
Q_101_Ben1
Q_101_B238
Q_101_B

我必须在char B'之后仅提取具有数字的数据,因此在这种情况下,它应该提取除了这两个Q_101_Bch1Q_101_Ben1之外的所有数据。< / p>

我尝试过这个查询:

select lang from test_table where lang REGEXP  '^[Q_101_B]|[0-9]'

但遗憾的是它拉动了所有这些。

此查询的确切正则表达式应该是什么?

注意:Q_101_B可以是一个动态变化的不同字符串,我会在PHP代码中构建查询时附加它。

1 个答案:

答案 0 :(得分:0)

您的原始模式将匹配以字符Q_10B开头或包含十进制数字的任何字符串。

请尝试使用此模式:

select lang from test_table where lang REGEXP  '^Q_101_B[0-9]'

这将匹配以Q_101_B开头,后跟十进制数字的任何字符串。

但是,既然你表示你也想要Q_101_B返回(没有小数),你可以使用它:

select lang from test_table where lang REGEXP  '^Q_101_B([0-9]|$)'

这将匹配以Q_101_B开头的任何字符串,后跟十进制数字或字符串结尾。

您可以看到此模式的演示here

此外,由于您声明Q_101_B只是一个示例字符串,并且在运行时可能会被其他字符串替换,因此我建议您使用preg_quote方法安全地逃脱你的模式中的文字。