在我的数据库中,数据存储如下:
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
之外的所有数据。< / p>
我尝试过这个查询:
select lang from test_table where lang REGEXP '^[Q_101_B]|[0-9]'
但遗憾的是它拉动了所有这些。
此查询的确切正则表达式应该是什么?
注意:Q_101_B
可以是一个动态变化的不同字符串,我会在PHP代码中构建查询时附加它。
答案 0 :(得分:0)
您的原始模式将匹配以字符Q
,_
,1
,0
或B
开头或包含十进制数字的任何字符串。
请尝试使用此模式:
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
方法安全地逃脱你的模式中的文字。