SQLite正则表达式用于查找字符串不在预定义集中的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite正则表达式用于查找字符串不在预定义集中的行相关的知识,希望对你有一定的参考价值。
我有一个SQLite 3列,它可以包含由+
连接的一些不同的字符串。只有一些字符串是有效的,我想找到这个列包含任何不属于有效字符串集的行的行。
例如,这些是有效的字符串
1
2.4
5X
0A
因此,如果列包含1+2.4+0A
它是有效的,但如果它包含1+2.4+6X
则无效(因为6X
不是有效集的一部分)。同样,1 2.4
将无效,因为1
和2.4
必须用+
隔开。
我尝试使用正则表达式进行试验,但我似乎无法构造一个只允许有效列表中的字符串。任何帮助将不胜感激,如前所述,我需要这个与SQLite 3一起使用。
答案
您可以使用(?:1|2.4|5X|0A)
来拥有一组所有有效的字符串。然后你可以检查一个字符串是否以一个有效的字符串开头,后跟任何数量的有效字符串,前面是+
,直到^(?:1|2.4|5X|0A)(?:+(?:1|2.4|5X|0A))*$
结束。
这会导致类似的东西
SELECT *
FROM elbat
WHERE nmuloc REGEXP '^(?:1|2.4|5X|0A)(?:+(?:1|2.4|5X|0A))*$';
获取有效字符串的记录。 (否定得到无效的。)
如果您还想允许空字符串有效,不确定您的描述是否正常,请将其扩展到^(?:1|2.4|5X|0A)(?:+(?:1|2.4|5X|0A))*$|^$
。
以上是关于SQLite正则表达式用于查找字符串不在预定义集中的行的主要内容,如果未能解决你的问题,请参考以下文章