我想测试字符串是否包含"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似乎并不喜欢这样。
附录:感谢David M概括了这个问题:
How to convert a PCRE to a POSIX RE?
最佳答案
比那个大的regex(当然,取决于您的数据和引擎的质量)更有效的是
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%'
这样做的另一个优点是更容易维护。如果堪萨斯州很常见,文本字段很大,那么它的工作效果就不太好。当然,你可以在自己的数据上测试这些,并告诉我们它们是如何比较的。