MySql正则表达式在文本中查找不同的字符串

时间:2017-02-18 00:38:43

标签: mysql regex

我有一个网站,用户可以使用自己的内容创建子网站。它就像wix.com。可以在内容中创建链接,并且一些用户滥用此功能来链接到恶意软件站点。

用户的内容存储在一个名为pages的表格中的MySQL数据库中,位于content列内。

我想找到每个包含以" http"开头的字符串的内容。但不要包含我的两个域之一(让我们说它们是mysite.comanother.com)。这会有所帮助,因为几乎每个内容都包含指向这两个网站的链接,但很少包含指向其他网站的链接。

例如:我想抓住http://badsite.com,但我不想抓住http://subdomain.mysite.com/page1http://name.another.com/?page=products

此外,即使文本中还包含指向我的某个域的链接(例如http://badsite.com),我也希望抓住http://sub.mysite.com/。因此,下面的查询无效:

select * 
from pages
where content like '%http%'
  and content not like '%mysite.com%'
  and content not like '%another.com%'

想要捕获的文字示例

  

Lorem ipsum dolor sit amet,consectetur adipiscing elit,<一个   HREF =" http://sub.mysite.com/ "> SED< / A>做eiusmod<一个   HREF =" http://badsite.com "> tempor< / A> incididunt ut labore et   dolore magna aliqua。

不想捕捉的文字示例

  

Lorem ipsum dolor sit amet,consectetur adipiscing elit,<一个   HREF =" http://sub.mysite.com/ "> SED< / A>做eiusmod<一个   HREF =" http://prefix.another.com/page2 "> tempor< / A> incididunt ut labore et   dolore magna aliqua。

简而言之,我希望找到所有链接到mysite.com或another.com以外的任何域名的网页。

我认为我必须使用正则表达式,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

请查看此部分:https://dev.mysql.com/doc/refman/5.7/en/regexp.html

对于条件组合,请考虑使用逻辑运算的括号,它们会帮助您表达您想要的任何内容,例如:

(cond1 OR cond2) AND NOT cond3 AND cond 4 ...等等,等等