我想测试一个字符串是否包含,"Kansas"然后是" State"。
"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似乎不喜欢这样。
比大型正则表达式更有效(当然,这取决于您的数据和引擎的质量)
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%'
这具有易于维护的附加优势。如果堪萨斯州很常见且文本字段很大,则效果会较差。当然,您可以根据自己的数据对它们进行测试,并告诉我们它们之间的比较。