1

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

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_Bch1,之外的所有数据Q_101_Ben1

我试过这个查询:

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

但不幸的是,它拉动了所有这些。

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

注意:Q_101_B可以是动态出现的不同字符串,我将在我的 PHP 代码中构建查询时附加它。

4

1 回答 1

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后跟十进制数字或字符串的结尾。

您可以在此处查看此模式的演示。

此外,由于您说您Q_101_B只是一个示例字符串,并且可能在运行时被不同的字符串替换,我建议您查看使用该preg_quote方法安全地转义模式中的文字。

于 2013-08-27T16:02:58.033 回答