我想获取其中给定关键字存在于文本中但不存在于任何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
和正则表达式。但这些也很脆。