一尘不染

正则表达式可以匹配除特定给定字符串之外的所有内容(包括空字符串)

sql

我想测试一个字符串是否包含,"Kansas"然后是" State"

例子:

"I am from Kansas"          true
"Kansas State is great"     false
"Kansas is a state"         true
"Kansas Kansas State"       true
"Kansas State vs Kansas"    true
"I'm from Kansas State"     false
"KansasState"               true

对于PCRE,我相信答案是这样的:

'Kansas(?! State)'

但是Mysql的REGEXP似乎不喜欢这样。


阅读 145

收藏
2021-05-30

共1个答案

一尘不染

比大型正则表达式更有效(当然,这取决于您的数据和引擎的质量)

WHERE col LIKE '%Kansas%' AND
  (col NOT LIKE '%Kansas State%' OR
  REPLACE(col, 'Kansas State', '') LIKE '%Kansas%')

但是,如果堪萨斯州通常以“堪萨斯州”的形式出现,那么您可能会发现以下更好:

WHERE col LIKE '%Kansas%' AND
  REPLACE(col, 'Kansas State', '') LIKE '%Kansas%'

这具有易于维护的附加优势。如果堪萨斯州很常见且文本字段很大,则效果会较差。当然,您可以根据自己的数据对它们进行测试,并告诉我们它们之间的比较。

2021-05-30