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将无效,因为12.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正则表达式用于查找字符串不在预定义集中的行的主要内容,如果未能解决你的问题,请参考以下文章

注释的正则表达式,但不在“字符串”内/不在另一个容器中

js正则表达式总结

PHP正则表达式的使用技巧

正则表达式 RegExp 对象

js正则表达式

JavaScript 正则