1

我想匹配任何不以“CA”或“CA[任何数字]”结尾的行。如何在 MySQL 中使用 rlike 来做到这一点?(注意它不支持?!等)。

这是正则匹配的正则表达式,我只需要一种方法来否定它: '^.*[C][A][0-9]?$'

(由于尴尬的架构限制,我不想使用not rlike ...

4

2 回答 2

6

诀窍是把它变成你想要匹配的内容的描述。在以下情况下,某些内容不会以 CA 或 CA(digit) 结尾:

它以 A 或数字以外的内容结尾,或

它以 A 以外的东西结尾,然后是一个数字,或者

它以 C 以外的东西结尾,然后是 A,然后是数字,或者

它以 C 以外的东西结尾,然后是 A,或

它等于 A 后跟一个数字,或

它等于 A 或一个数字,或

它是空的。

所以:

rlike '[^A0-9]$|[^A][0-9]$|[^C]A[0-9]$|[^C]A$|^A[0-9]$|^[A0-9]$|^$'

未经测试,未经“优化”,可能在上述某处至少出现一个错误。

于 2008-12-03T06:10:45.717 回答
2

那么正则表达式来自表格中的一列,并且那里的大多数模式已经起作用。因此,如果我可以使这种模式在现有结构中工作,那将是最简单的。

我曾经做过类似的事情,我所做的是创建另一个列(我想我使用了一个位域),其中包含正则表达式的选项(不区分大小写、锚定、否定等)。类似的方法可能对您有用。

于 2008-12-02T19:01:09.593 回答