MySQL LIKE:在文本中搜索关键字,但在html标签中不搜索



我想获取其中给定关键字存在于文本中但不存在于任何html标记中的记录
关键字为"的示例;span":

Hello <span>world</span>

不,关键字只存在于标记中。

Hello <span>world</span>, blah blah span blah blah

好的,关键字已经出现在文本中了。

这就是我目前所拥有的:

SELECT * FROM mytable WHERE `content` LIKE '%span%' AND `content` NOT LIKE '<%span%>'; 

但它不起作用
正确的方法是什么?

SQL的LIKE运算符确实不适合以需要处理HTML标记的方式进行搜索。无论你在这里做什么都是脆弱的(容易产生虚假的结果(。

话虽如此,试试这个。

SELECT * FROM mytable
WHERE content LIKE '%span%'
AND content NOT LIKE '%<span>%'   /* opening tag */
AND content NOT LIKE '%</span>%'; /* closing tag */

只要HTML中的<span>标记很简单,这可能会得到您想要的结果。但是,一旦span标记有了<span id="spanid" class="text">,就不能再使用LIKE了。LIKE '%<span%>%'中的第二个%匹配HTML中从第一个<span...>到最后一个结束标记的所有内容。

您可以考虑使用RLIKE和正则表达式。但这些也很脆。

相关内容

最新更新