SQLite正则表达式用于查找字符串不在预定义集中的行

问题描述 投票:0回答:1

我有一个SQLite 3列,它可以包含由+连接的一些不同的字符串。只有一些字符串是有效的,我想找到这个列包含任何不属于有效字符串集的行的行。

例如,这些是有效的字符串

1 2.4 5X 0A

因此,如果列包含1+2.4+0A它是有效的,但如果它包含1+2.4+6X则无效(因为6X不是有效集的一部分)。同样,1 2.4将无效,因为12.4必须用+隔开。

我尝试使用正则表达式进行试验,但我似乎无法构造一个只允许有效列表中的字符串。任何帮助将不胜感激,如前所述,我需要这个与SQLite 3一起使用。

regex sqlite
1个回答
2
投票

您可以使用(?: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))*$|^$

© www.soinside.com 2019 - 2024. All rights reserved.